swoole如何主动给客户端推送消息?

在swoole 的回调函数中 比如onOpen onMessage 里面会有 $serv 但是如果在其他地方想给客户端推送消息的时候咋使用呢?

之前是使用$serv->push($fd,$data);

但是如果在其他地方的话serv是不存在的 如何解决这个呢????

阅读 9.9k
5 个回答

简单点来说:“其他地方” -》 连接到server -》 $serv->push($fd,$data);
详细点来说:在其他php-fpm的程序里,你需要tcp连接到通过swoole启动的服务,然后找到你要发送的用户($fd),然后再发送

新手上路,请多包涵

其实swoole里面有个onRequest回调,在这个回调当中监听一下就行了。
通过crul请求带参数完成逻辑就行。例如:http://www.demo.com:9501/?param=123456

首先我不知道你说的其他地方在哪儿,具体来说就是代码的组织方式。这个,没有代码我只能瞎猜。

你可能是要在controller中来使用这个server,但是controller可能是被swoole文件通过call_user_func这样的方式调用的。

这样的话,你可以通过传参数的方式,把serv直接当参数传给业务代码;
然后,除此之外,你还可以试试global;

谢邀,你可以试试在有$serv的服务上监听一个事件,然后在其他地方调用这个事件,$serv接收到监听开始处理逻辑

我刚刚也遇到这个场景的问题。

我的设想是,通过在服务端构建一个websocket客户端连接,去请求就好了,业务仍然可以写在onMessage里。

比如我做了一个定时任务的controller,要在定时任务里触发主动推送给某人,这个控制器肯定没有websocket server的方法的,只能通过在controller里构建一个websocket的客户端了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题