首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole中的websocket的如果发给指定人消息
swoole版本:1.9.2 需求: 类似直播的评论功能, 比如A房间下面显示A房间的评论 B房间下面显示B房间的评论.... 这个应该是个正常的需求吧.. 但是我现在发现一个问题, 就是 消息是发给所有在线链接者.. 就是相当于A下面的评论在 BCDEF 都能看到.. 这就很蛋疼了... 不知道啥问题.. 求各位大哥大姐帮帮忙看看. 公司很急呀 代码如下: ``` <?php $ws = new Swoole\Websocket\Server("0.0.0.0", 9508); //监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { $fd = $request->fd; echo "client-{$fd} is connect\n"; //$ws->push($request->fd, "hello, welcome\n"); }); //监听WebSocket消息事件 $ws->on('message', function ($ws, $frame) { // $msg = 'from'.$frame->fd.":{$frame->data}\n"; // $data = htmlentities(htmlspecialchars($frame->data)); // if(mb_strlen($data,'utf8')>30){ // $data = mb_substr($data, 0,30,'utf-8').'...'; // } $data = json_decode($frame->data,true); //判断是否有礼物 if($data['gift']){ $gift = json_decode($data['gift'],true); $arr = array( 'info' => $data['info'], 'uid' => $data['uid'], 'username' =>$data['username'], 'imageSrc' =>$gift['img'], 'number' =>$gift['number'], ); }else{ // 正常发送 $arr = array( 'info' => $data['info'], 'uid' => $data['uid'], 'username' =>$data['username'], 'href' => 'javascript:void(0);', 'status' => 1 ); } $msg = json_encode($arr); foreach($ws->connections as $fd) { //发送信息 $ws->push($fd, $msg); } }); //监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; }); $ws->start(); ```
发布于6年前 · 3 次浏览 · 来自
提问
唐
唐宋缘明
swoole版本:1.9.2 需求: 类似直播的评论功能, 比如A房间下面显示A房间的评论 B房间下面显示B房间的评论.... 这个应该是个正常的需求吧.. 但是我现在发现一个问题, 就是 消息是发给所有在线链接者.. 就是相当于A下面的评论在 BCDEF 都能看到.. 这就很蛋疼了... 不知道啥问题.. 求各位大哥大姐帮帮忙看看. 公司很急呀 代码如下: ``` <?php $ws = new Swoole\Websocket\Server("0.0.0.0", 9508); //监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { $fd = $request->fd; echo "client-{$fd} is connect\n"; //$ws->push($request->fd, "hello, welcome\n"); }); //监听WebSocket消息事件 $ws->on('message', function ($ws, $frame) { // $msg = 'from'.$frame->fd.":{$frame->data}\n"; // $data = htmlentities(htmlspecialchars($frame->data)); // if(mb_strlen($data,'utf8')>30){ // $data = mb_substr($data, 0,30,'utf-8').'...'; // } $data = json_decode($frame->data,true); //判断是否有礼物 if($data['gift']){ $gift = json_decode($data['gift'],true); $arr = array( 'info' => $data['info'], 'uid' => $data['uid'], 'username' =>$data['username'], 'imageSrc' =>$gift['img'], 'number' =>$gift['number'], ); }else{ // 正常发送 $arr = array( 'info' => $data['info'], 'uid' => $data['uid'], 'username' =>$data['username'], 'href' => 'javascript:void(0);', 'status' => 1 ); } $msg = json_encode($arr); foreach($ws->connections as $fd) { //发送信息 $ws->push($fd, $msg); } }); //监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; }); $ws->start(); ```
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2018-06-04
亡
亡命之徒
房间的概念应该是要你自己业务层去实现 比如用自己定义的数组来保存房间和房间内的用户 然后再去遍历对应的数组
赞
0
回复
2018-06-04
博
博爱
<?php $ws = new Swoole\Websocket\Server("0.0.0.0", 9508); $ws->on('open', function ($ws, $request) { parse_str($request->server['query_string'],$get); $fd = $request->fd; $GLOBALS['room_users'][$get['roomId']][] = $fd;
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。