$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