首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
websocket服务器主动推送给指定的客户端
目前采用官方的代码,可以使用客户端发信息给服务器,服务器回信息了。 也可以在服务器端加代码,返回相应的信息。 现在想在服务器主动推送给。 我的思路是这样的: 1.每次客户端进来,都会记录他的fd,fd相当于它的身份证吧(不知道是不是唯一的)。 2.当要向fd=1的客户端主动发消息时。通过其他客户端进去$server->on('message' ,然后做相应的指令判断,给 $server->push(1, "this is server"); $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->start();
发布于8年前 · 6 次浏览 · 来自
提问
E
Eric·Shen
目前采用官方的代码,可以使用客户端发信息给服务器,服务器回信息了。 也可以在服务器端加代码,返回相应的信息。 现在想在服务器主动推送给。 我的思路是这样的: 1.每次客户端进来,都会记录他的fd,fd相当于它的身份证吧(不知道是不是唯一的)。 2.当要向fd=1的客户端主动发消息时。通过其他客户端进去$server->on('message' ,然后做相应的指令判断,给 $server->push(1, "this is server"); $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->start();
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2018-03-25
ك
كل صباح استيقظ لا ال
每次进来1个fd,同时进来的第一句message为它的name.用数据库将fd,name绑定起来。同时数据库字段都是唯一的。 这样可以通过查询主机名来获取指定的客户端。 我是这样的思路,不知道大家有什么更好的方法没有?
赞
0
回复
2018-03-29
梦
梦飞
一般推送有两种方式把:1.定时推送,2.触发时推送;定时推送的话用定时器就好,触发时推送一般是在收到message,然后进行判断,如果符合条件就触发推送。 消息的fd是一定要保存的,最终的推送始终是要推送到fd指定的连接;如果是按照其它条件来推送,比如特定用户名,或者其它条件,就要把这个条件和fd一起保存起来(数据库或者内存数据结构,如redis/swoole_table等),触发推送时,先遍历这个集合,通过特定条件找到符合的fd,然后push()就可以了。
赞
0
回复