Swoole从入门到入土(15)——WebSocket服务器[初步接触]
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。换句话说,Websocket让web可以与服务端实现长连接。
在Swoole中,通过内置的 WebSocket 服务器支持,通过几行 PHP 代码就可以写出一个异步 IO 的多进程的 WebSocket 服务器。WebSocket\Server 继承自 Http\Server,所以 Http\Server 提供的所有 API 和配置项都可以使用。
现在我们用一段简短的代码,先了解websocket在swoole中如何实现:
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501); $server->on('open', function (Swoole\WebSocket\Server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; }); $server->on('message', function (Swoole\WebSocket\Server $server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) { global $server;//调用外部的server // $server->connections 遍历所有websocket连接用户的fd,给所有用户推送 foreach ($server->connections as $fd) { // 需要先判断是否是正确的websocket连接,否则有可能会push失败 if ($server->isEstablished($fd)) { $server->push($fd, $request->get['message']); } } }); $server->start();
在这里,onOpen / onMessage / onClose属于websocket的专属事件(暂时先不用了解得太详细)。而onRequest则是为了让WebSocket\Server 也可以同时作为 HTTP 服务器。未设置 onRequest 回调,WebSocket\Server 收到 HTTP 请求后会返回 HTTP 400 错误页面。
这段代码运行后,如何调试呢?这时候我们需要一个本地的websocket调试器。本人在网上寻找了挺久,除了apache jmeter有相关的插件支持websocket调试之外,就没有太理想的工具。所以,暂时自己写了简单的一个调试工具,勉强应付使用。
点击链接进入工具:传送门
-------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 独立开发,这条路可行吗?
· 我在厂里搞 wine 的日子
· 如何通过向量化技术比较两段文本是否相似?
· 35+程序员的转型之路:经济寒冬中的希望与策略
· JavaScript中如何遍历对象?
· 独立开发,这条路可行吗?
· C#源生成器:让你的代码飞起来的黑科技
· Java简历、面试、试用期、转正
· Java开发AI项目,太爽了!LangChain4j保姆级教程
· 极大提高项目部署的生产力!分享一个半自动化的CICD实现方案