首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
求问?UID和FD该如何进行绑定???
我用Bind绑定以后 通过UID传递信息不成功报错 连接不存在 我想请问 该怎么绑定 有没有demo看下 以下是我写的代码 {{{php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0", 9502); //监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { $info = '欢迎代号'.$request->fd.'加入聊天室'; $ws->push($request->fd,json_encode($ws->connection_info($request->fd))); // SwooleManager::pushAll($ws,$info); }); //监听WebSocket消息事件 $ws->on('message', function ($ws, $frame) { $data = json_decode($frame->data); $uid = empty($data->uid)?0:$data->uid; $n = array(); if(!empty($uid)){ $b = $ws->bind($frame->fd,$uid); $n = $ws->connection_info($frame->fd); $n[] = $b; $n[] = $data->content; $n[] = $data->uid; if($b){ SwooleManager::saveFd('from_id', $uid); } } if(empty($data->content)) return; $ws->push($uid,json_encode($n)); }); //监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { $ws->close($fd); // SwooleManager::pushAll($ws,"代号 {$fd} 被你们吓跑了\n"); SwooleManager::close($fd); }); $ws->start(); }}}
发布于7年前 · 3 次浏览 · 来自
提问
我用Bind绑定以后 通过UID传递信息不成功报错 连接不存在 我想请问 该怎么绑定 有没有demo看下 以下是我写的代码 {{{php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0", 9502); //监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { $info = '欢迎代号'.$request->fd.'加入聊天室'; $ws->push($request->fd,json_encode($ws->connection_info($request->fd))); // SwooleManager::pushAll($ws,$info); }); //监听WebSocket消息事件 $ws->on('message', function ($ws, $frame) { $data = json_decode($frame->data); $uid = empty($data->uid)?0:$data->uid; $n = array(); if(!empty($uid)){ $b = $ws->bind($frame->fd,$uid); $n = $ws->connection_info($frame->fd); $n[] = $b; $n[] = $data->content; $n[] = $data->uid; if($b){ SwooleManager::saveFd('from_id', $uid); } } if(empty($data->content)) return; $ws->push($uid,json_encode($n)); }); //监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { $ws->close($fd); // SwooleManager::pushAll($ws,"代号 {$fd} 被你们吓跑了\n"); SwooleManager::close($fd); }); $ws->start(); }}}
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2017-05-31
小
小菜瓜
`bind`操作实际是让用户层可以控制请求数据的投递,是配合`dispatch_mode=5`来使用的。`$server->push`还是必须使用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一直是同一个。没用使用到多进程啊。