Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证
2年前
阅读 3678
评论 0
喜欢 0
### 0、前言
前面基本的WebSocket操作,我们基本都已经掌握了,接下来我们要学习的是怎么用`user_id`去关联一个fd凭证呢?
按我们的思路应该是在`data`存储器中,将`fd`替换成`user_id`,但这样在server的`close`事件中,就需要用遍历的方式去读取关闭的对应连接了。
这样费时的操作,肯定不是我们想要的。
实际上,我们只需要新增一个`open`连接存储器记录`fd`即可,然后在`code=1`的时候用`user_id`更新到原来的`data`存储器中即可。
### 1、注意事项
① 客户端全部使用`user_id`作为身份凭证
② 服务端新建一个open存储器
③ 服务端在`code=1`时,在从open存储器中读取`fd`凭证写入data存储器中。
④ 服务端在`close`事件中记得清除已经关闭的open存储器凭证,防止存储器无限增大。
### 2、客户端代码修改:
```
// +----------------------------------------------------------------------
// 小黄牛blog - websocket
// +----------------------------------------------------------------------
// Copyright (c) 2018 https://xiuxian.junphp.com All rights reserved.
// +----------------------------------------------------------------------
// Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// Author: 小黄牛 <1731223728@qq.com>
// +----------------------------------------------------------------------
session_start();
# 模拟用户登录
if (!empty($_POST['nice'])) {
$data = [
'nice' => $_POST['nice'],
'id' => uniqid(),
];
$_SESSION['user'] = $data;
echo json_encode($data, JSON_UNESCAPED_UNICODE);
exit;
# 模拟用于退出登录
} else if (!empty($_POST['out'])) {
$_SESSION['user'] = '';
}
?>
Swoole+Websocket案例 - 小黄牛html,body{margin:0;padding:0;font-size:13px}
.left{width: 20%;height: 600px;border: 1px solid #ddd;float: left;}
.right{width: 59.7%;height: 400px;border: 1px solid #ddd;border-left: 0px;float: left;overflow: auto;}
.bottom{width: 79.7%;height: 199px;border: 1px solid #ddd;border-left: 0px;border-top: 0px;float: left;}
#content{width: 99.5%;height: 165px;}
.blue{color:blue}
.red{color:red}
.div_left{width:100%;float:left}
.div_right{width:100%;float:left;text-align: right;}
.div_centent{width:100%;float:left;text-align: center;}
#USER{width:100%;height: 40px;line-height: 40px;border-bottom: 1px solid #ddd;float:left}
#error{width:20%;height:400px;float: left;overflow: auto;}
- 登录
- 退出