为了账号安全,请及时绑定邮箱和手机立即绑定

php使用swoole搭建了websocket服务器,前端页面构建长连接之后如何后端主动往前端发送数据(如何触发)

php使用swoole搭建了websocket服务器,前端页面构建长连接之后如何后端主动往前端发送数据(如何触发)

PHP
拉丁的传说 2019-03-06 12:18:19
我构建了一个socket服务器, 接收硬件传送来的数据。处理并传入数据库。我想通过websocket实时的在前端显示数据。该如何办到。 如何在socket中给websocket发送命令,告诉websocket下发数据。或者如何让websocket知道socket接收到数据并做了处理了。 原本想通过websocket中多开个线程。在不影响websocket收发数据的情况下, lpop等待队列, 可是不知道该怎么开出这个线程。。。。求指教!!!!!!!
查看完整描述

4 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

1、PHP哪儿线程?即便你用swoole,也一样,哪儿有什么线程
2、其次是这种问题建议你配合一个结构图,以及场景使用者

我单方面认为,你这个前端页面就是给公司内部用的,这样我觉得你都完全没必要用什么websocket,AJAX轮询查数据库就行了,也就是说这个前端所处的流程后置了,这样似乎也能解决你的问题,而且内部人用,用AJAX轮询一般数据库都能吃得消。

如果非要按照你说的那样,引入一层消息队列就行了。socket收到硬件发来的请求后,“双写”一下,一个是写到数据库,另一个写到消息队列,就是充当了生产者角色。消息队列的另一头,就是websocket作为消费者就可以了,不断从消息队列中读消息然后send给前端即可。消息队列可以用redis充当一下,没问题的。

[编辑补充:为了防止被杆精纠缠,补充一下:PHP有多线程,pthread扩展;swoole内也有多线程,就是master进程中的reactor线程]

查看完整回答
反对 回复 2019-03-18
?
倚天杖

TA贡献1828条经验 获得超3个赞

现在我的一种解决方法是使用了redis的订阅

查看完整回答
反对 回复 2019-03-18
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我是在前端写了一个cookie,前端建立链接的时候就用cookie为键把这个链接记下,前端断开时清除这条,或者超过一定时间清除,需要发消息的时候就用cookie找链接发消息,或者直接循环全部发一遍

查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 776 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信