javascript - websocket怎么主动从服务端发送信息
天蓬老师
天蓬老师 2017-04-11 13:16:49
[JavaScript讨论组]

我在网上看了很多聊天室的应用, 但是基本都是在客户端出发一些操作的时候(比如客户端push信息到服务端时), 服务端进行一些处理, 然后再push给某些客户端. 这些现在我也都实现了.

我的问题是, 我怎么从服务端主动发送一个push给某些用户, (比如服务端新发布了一个文章).

我现在服务端用的php, swoole. 这个服务启动后, 在监听客户端的时候, 怎么再监听一些其他的呢? (比方说mq? 有新东西就调用socket的push?); 或者说我做其他服务端操作的时候? 我能获取到websocket服务? 然后push?

这点始终想不明白, 望大神指点.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
高洛峰

websocket属于CS模型(客户端-服务端)模型,客户端可以是Javascript中new Websocket来创建client,也可以是PHP的中的创建socket来创建client。

对应于你的问题,只需要写个PHP的websocket client即可,swoole example中提供了这样的client

然后mq有新东西了就调用此client向websocket server发一些特殊的消息(可以包含接收方信息,内容等信息),websocket server收到消息时肯定能得到当前server的实例,再结合者收到的消息就可解决你的问题。

阿神

我以前用过轮询,不知道适不适合你

PHP中文网

服务端也可以作为客户端。
之前恰好也用到过socket通信的实例,服务端上用curl推送给服务端上的socket服务,然后客户端监听服务端的socket端口,这样服务端一有数据变动,客户端就能监听到。
大概就是这样。

怪我咯

1、php-fpm是无法主动push消息给客户的。

2、因为swoole是非阻塞模型,所以多开几个服务端socket就可以监听其他端口了。

3、websocket不是一个服务(是协议)。可以看做是一个长连接的HTTP,所以只要拿到与客户端通信的socket然后按照websocket的协议格式写socket就可以了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号