ask {$task_id} 已完成".PHP_EOL;
echo "########".PHP_EOL.PHP_EOL;
}
public function onClose($serv, $fd) {
echo "#### onClose ####".PHP_EOL;
echo "client {$fd} closed".PHP_EOL;
echo "########".PHP_EOL.PHP_EOL;
}
public function onMessage($serv, $frame) {
echo "#### onMessage ####".PHP_EOL;
echo "receive from fd{$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}".PHP_EOL;
$serv->task(['type' => 'speak', 'msg' => $frame->data]);
echo "########".PHP_EOL.PHP_EOL;
}
public function onRequest($request, $response) {
echo "#### onRequest ####".PHP_EOL;
$response->header("Content-Type", "text/html; charset=utf-8");
$server = $request->server;
$path_info = $server['path_info'];
$request_uri = $server['request_uri'];
echo "PATH_INFO:".$path_info.PHP_EOL;
if ($path_info == '/favicon.ico' || $request_uri == '/favicon.ico') {
return $response->end();
}
$html = "<h1>你好 Swoole.</h1>";
$response->end($html);
}
public function onReceive($serv, $fd, $from_id, $data) {
echo "#### onReceive ####".PHP_EOL;
$length = unpack('N', $data)[1];
echo "Length:".$length.PHP_EOL;
$msg = substr($data, -$length);
echo "Msg:".$msg.PHP_EOL;
}
public function onPacket($serv, $data, $clientInfo) {
echo "#### onPacket ####".PHP_EOL;
$serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
var_dump($clientInfo);
}
}
$server = new Server();
4 个客户端连接的代码分别是:
1、9501 onMessage 处理 WebSocket。可以参考原来文章 Swoole WebSocket 的应用 中的代码即可。
2、9501 onRequest 处理 HTTP。可以参考原来文章 Swoole HTTP 的应用 中的代码即可。
3、9502 onReceive 处理 TCP。可以参考原来文章 Swoole Task 的应用 中的代码即可。
4、9503 onPacket 处理 UDP。
示例代码:
netcat -u 10.211.55.4 9503
小结
一、多端口的应用场景是什么?
比如,开发一个直播网站,直播用一个端口,IM聊天用一个端口。
比如,开发一个RPC服务,数据通讯用一个端口,统计界面用一个端口。
本文欢迎转发,转发请注明作者和出处,谢谢!