首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
bind()和redis一起使用的问题
### 问题描述 在客户端和服务器进行绑定的时候,第一个绑定的客户端是正常的,第二个绑定的客户端一直在绑定新的管道 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole版本4.4 PHP版本7.3 操作系统Linux Red Hat ### 相关代码 ```php /** * [onOpen 建立连接时的回调函数] * @method onOpen * @param swoole_server $serv [description] * @param swoole_http_request $req [description] * @return [type] [description] */ public function onOpen(swoole_server $serv, swoole_http_request $req) { if (!empty($req->get) && $req->get['uid']) { $serv->bind($req->fd, $req->get['uid']); } } /** * [onMessage 接收到socket客户端发送数据的回调函数] * @method onMessage * @param swoole_server $serv [description] * @param swoole_websocket_frame $frame [description] * @return [type] [description] */ public function onMessage(swoole_server $serv, swoole_websocket_frame $frame) { //收到数据时处理数据 $clientData = json_decode($frame->data,true); // 绑定发消息UID和管道 $this->redis->set($clientData['from_uid'], $frame->fd); // 先做用户验证 // 做正常流程 // 统一放到任务队列里面去处理 $task_id = $serv->task($clientData); print_r("$task_id\n\r"); // 任务失败的情况,等会做处理 } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 我期待的结果是在客户端第一次连接到时候Uid和fd正常绑定,然后把uid和fd放到redis里面存储一份。目前看到的问题是redis里面第二个客户端连接的时候uid不变,存储的fd一直在变
发布于3年前 · 1 次浏览 · 来自
提问
西班牙馅饼
### 问题描述 在客户端和服务器进行绑定的时候,第一个绑定的客户端是正常的,第二个绑定的客户端一直在绑定新的管道 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole版本4.4 PHP版本7.3 操作系统Linux Red Hat ### 相关代码 ```php /** * [onOpen 建立连接时的回调函数] * @method onOpen * @param swoole_server $serv [description] * @param swoole_http_request $req [description] * @return [type] [description] */ public function onOpen(swoole_server $serv, swoole_http_request $req) { if (!empty($req->get) && $req->get['uid']) { $serv->bind($req->fd, $req->get['uid']); } } /** * [onMessage 接收到socket客户端发送数据的回调函数] * @method onMessage * @param swoole_server $serv [description] * @param swoole_websocket_frame $frame [description] * @return [type] [description] */ public function onMessage(swoole_server $serv, swoole_websocket_frame $frame) { //收到数据时处理数据 $clientData = json_decode($frame->data,true); // 绑定发消息UID和管道 $this->redis->set($clientData['from_uid'], $frame->fd); // 先做用户验证 // 做正常流程 // 统一放到任务队列里面去处理 $task_id = $serv->task($clientData); print_r("$task_id\n\r"); // 任务失败的情况,等会做处理 } ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 我期待的结果是在客户端第一次连接到时候Uid和fd正常绑定,然后把uid和fd放到redis里面存储一份。目前看到的问题是redis里面第二个客户端连接的时候uid不变,存储的fd一直在变
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2021-03-27
鲁飞
未复现问题。
赞
0
回复
2021-03-28
西班牙馅饼
回复
鲁飞
您好,问题不好复现。 有时候断开重新连接好几次,也就是刷新页面好几次都不会改变这个UID绑定的fd 有时候刷新一次就会绑定一次新的fd
赞
0
回复
微信公众号
热门内容
作者其它话题
- swoole聊天服务自动断开
- swoole\http\client在CLI命令行提示未找到
- Swoole客户端发送请求,但服务器端没有收到消息
- swoole的onTask()第一次执行的时候都会是失败的嘛
暂无回复的问答
- 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一直是同一个。没用使用到多进程啊。