$server = new \Swoole\Server('0.0.0.0', 10005, SWOOLE_BASE, SWOOLE_SOCK_TCP); // 回调函数 connect , 当有新的客户端链接时,会调用此方法 $server->on('connect', function(\Swoole\Server $server, $fd, $fromId){ echo sprintf("new client %s joined " . PHP_EOL, $fd); }); // 回调函数 receive, 当接收到客户端数据时,会调用此方法 $server->on('receive', function(\Swoole\Server $server, $fd, $fromId, $receive){ $server->send($fd, sprintf("server got message %s from %s ", trim($receive), $fd)); }); // 回调函数 close, 客户端断开链接时会调用此方法 $server->on('close', function(\Swoole\Server $server, $fd, $fromId){ echo sprintf("client %s closed" . PHP_EOL, $fd); }); // 启动服务器 $server->start();
$client = new \Swoole\Client(SWOOLE_TCP, SWOOLE_SOCK_ASYNC); // 链接服务器成功会回调此方法 $client->on('connect', function(\Swoole\Client $client) { echo sprintf("connect success" . PHP_EOL); $content = fopen('php://stdin', 'r'); echo "Say: "; $client->send(fgets(STDIN)); }); // 接收到服务器消息回调此方法 $client->on('receive', function(\Swoole\Client $client, $receive) { echo sprintf("got message: [%s] from server" . PHP_EOL, $receive); $content = fopen('php://stdin', 'r'); echo "Say: "; $client->send(fgets(STDIN)); }); // 关闭链接时会回调此方法 $client->on('close', function(\Swoole\Client $client) { echo sprintf("client close" . PHP_EOL); }); // 有错误时会回调此方法 $client->on('error', function(\Swoole\Client $client) { echo sprintf("got error %s" . PHP_EOL, swoole_strerror($client->errCode)); }); $client->connect('0.0.0.0', 10005);
事实上整个过程远比上面复杂,但 swoole 都给咱们封装好了,咱们只须要把业务逻辑写在相应的回调函数内便可php