摘要:的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。因此必须使用异步客户端来实现。
PHP 的redis扩展是阻塞式 IO ,使用订阅/发布模式时,会导致整个进程进入阻塞。因此必须使用SwooleRedis异步客户端来实现。
实例代码$server = new swoole_websocket_server("0.0.0.0", 9501); $server->on("workerStart", function ($server, $workerId) { $client = new swoole_redis; $client->on("message", function (swoole_redis $client, $result) use ($server) { if ($result[0] == "message") { foreach($server->connections as $fd) { $server->push($fd, $result[1]); } } }); $client->connect("127.0.0.1", 6379, function (swoole_redis $client, $result) { $client->subscribe("msg_0"); }); }); $server->on("open", function ($server, $request) { }); $server->on("message", function (swoole_websocket_server $server, $frame) { $server->push($frame->fd, "hello"); }); $server->on("close", function ($serv, $fd) { }); $server->start();实现过程
在进程启动(onWorkerStart)时创建了SwooleRedis客户端,连接到Redis服务器
连接成功后,订阅msg_0主题的消息
当有新的message时,SwooleRedis会触发onMessage事件回调
在这个回调函数中使用$server->connections遍历服务器所有的连接,发送消息
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25785.html
摘要:广播这是最简单的集群通讯解决方案。实现方法在治理中心监听集群服务事件,并及时更新哈希环。 问题起因 最近做项目时遇到了需要多用户之间通信的问题,涉及到了WebSocket握手请求,以及集群中WebSocket Session共享的问题。 期间我经过了几天的研究,总结出了几个实现分布式WebSocket集群的办法,从zuul到spring cloud gateway的不同尝试,总结出了...
摘要:经过琢磨,其实是要考虑安全性的。具体在以下几个方面跨域连接协议升级前握手拦截器消息信道拦截器对于跨域问题,我们可以通过方法来设置可连接的域名,防止跨站连接。 前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过。同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀。我们进入正题。直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一大批人,一个平台主播粗略估计就...
摘要:它采用了请求响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理弊端协议无法实现服务器主动向客户端发起消息。如何使用客户端创建对象属性表示连接状态可选值表示连接尚未建立。表示连接正在进行关闭。 一言不合就上效果图演示showImg(https://segmentfault.com/img/bVbkUDl?w=1920&h=638); 项目:http://112.74.164.1...
阅读 871·2021-09-03 10:42
阅读 1499·2019-08-30 15:56
阅读 1423·2019-08-29 17:27
阅读 860·2019-08-29 15:25
阅读 3126·2019-08-26 18:27
阅读 2454·2019-08-26 13:41
阅读 1870·2019-08-26 10:39
阅读 1451·2019-08-23 18:36