iankuca/node

此包已被弃用且不再维护。未建议替代包。

一个具有事件循环(类似node.js)的异步PHP框架

v0.0.4 2012-11-01 13:45 UTC

This package is not auto-updated.

Last update: 2024-01-06 09:11:14 UTC


README

node.php

一个具有事件循环(类似node.js)的异步PHP框架

安装

首选方式是使用 composer

{
  "require": { "iankuca/node": "*" }
}

或者直接使用此仓库。

用法

$ php -f main.php yourfile.php

示例

超时

<?php
echo "A";
setTimeout(function () {
  echo "C";
}, 2000);
echo "B";

这将在2秒后打印AB并添加C。然后退出。

HTTP服务器

<?php
$server = \Node\HTTP::createServer(function ($req, $res) {
  $res->writeHead(200, array(
    'content-type' => 'text/plain; charset=UTF-8'
  ));
  $res->write('Hello world!');
  $res->end();
});

$port = 8080;
$server->listen($port, 'localhost');
console_log('The HTTP server is listening on port %d.', $port);

这将在端口8080上创建一个HTTP服务器。它将Hello world!写入每个响应。它不会自行退出。

HTTP请求

<?php
$options = array(
  'host' => 'ifconfig.me',
  'path' => '/ip'
);

\Node\HTTP::request($options, function ($res) {
  console_log('status: %d', $res->status);
  print_r($res->headers);

  $res->on('data', function ($chunk) {
    echo $chunk;
  });
});

它向http://ifoconfig.me/ip发出HTTP GET请求,并在响应对象准备好时异步调用提供的回调函数。它等待响应体。然后退出。

标准输出将是…

status: 200
Array
(...)
XX.XX.XX.XX

目录列表

<?php
\Node\FS::readdir('/tmp', function ($err, $files) {
  if ($err) throw $err;
  print_r($files);
});

启动一个子进程ls -a /tmp,并在完成后异步调用提供的回调函数。然后退出。

日志记录

由于进程的标准输出不送到浏览器,所以最终异常和警告在终端窗口中可见。原生的异常字符串化器相当糟糕,这就是为什么node.php包括它自己的错误格式化器。异常现在要友好得多

Exception Example

另一个新增功能是console_log()函数,它基本上是一个带有添加换行符(\n)的sprintf,它将输出到标准输出。

console_log('%d + %d = %s', 1, 2, 'awesome');
// stdout: 1 + 2 = awesome