ulises58/simple-tcp-server

用PHP编写的简单TCP服务器

dev-master 2020-07-08 00:52 UTC

This package is not auto-updated.

Last update: 2024-09-26 19:32:22 UTC


README

有两个TCP服务器。一个是阻塞式TCP服务器,另一个是非阻塞式TCP服务器。

BlockServer功能有限,只能接受一个客户端。这意味着服务器一次只能处理一个连接。只有当客户端离开并关闭连接时,下一个客户端才能由服务器处理。

基于system Select()SelectServerBlockServer更好,因为具有非阻塞功能。因此,服务器可以同时接受多个客户端。

示例

回声服务器

php examples/EchoServer.php

// require autoload file from composer
require __DIR__ . '/../vendor/autoload.php';

class Logger extends \Psr\Log\AbstractLogger
{
    public function log($level, $message, array $context = array())
    {
        echo sprintf("%s: %s %s", $level, $message, !empty($context) ? json_encode($context) : '') . PHP_EOL;
    }
}

// listen on address 127.0.0.1 and port 8000
$echoServer = new \Hbliang\SimpleTcpServer\SelectServer('127.0.0.1', 8000);
//$echoServer = new \Hbliang\SimpleTcpServer\BlockServer('127.0.0.1', 8000);

// trigger while receiving data from client
$echoServer->on('data', function (\Hbliang\SimpleTcpServer\Connection $connection, $data) {
    // send data to client
    $connection->write($data . PHP_EOL);
});

// trigger when new connection comes
$echoServer->on('connection', function (\Hbliang\SimpleTcpServer\Connection $connection) {
    $connection->write('welcome' .PHP_EOL);
});

// trigger when occur error
$echoServer->on('error', function (\Exception $e) {
    echo 'Error: ' . $e->getMessage() . PHP_EOL;
});

$echoServer->setLogger(new Logger());

$echoServer->run();

参考