欢迎来到vitphp
首页
使用手册
安装教程
开发文档
应用市场
演示站
更新日志
用户协议
入门指引
关于我们
框架介绍
安装运行
免责声明
应用开发
创建应用
应用开发
模板开发
应用目录
config.xml
VitPhp框架
目录结构
数据库字典
全局变量
控制器
类库
域名绑定路由
函数
系统权限管理
前端使用
html默认绑定事件
标签
Workerman
微信公众号
网页授权
微信支付
微信小程序
UniApp
应用市场
绑定云服务
应用在线更新
小程序前端上传
商品管理
用户相关
订单相关
Workerman
自vitphp1.4.1版本后集成了Workerman,由于现在聊天和物联网服务日益普遍,现1.6.0继续深度优化Workerman服务,后期有任何地方欢迎大家提出问题,我们将继续完善。 1.6.0版本新增2个文件 `app\index\controller\common\WorkerHandle;` `app\index\controller\common\Worker;` Worker文件是服务文件,主要是一些事件的回调 WorkerHandle文件是外漏文件,给应用开发的时候调用 在命令行启动服务端 `php think worker:server` 如果在Linux下面,同样支持reload|restart|stop|status 操作 `php think worker:server reload` 调用后台方法时需要先引入文件 `use app\index\controller\common\WorkerHandle;` 详情可以参考[thinkphpWorkerman文档](https://www.kancloud.cn/manual/thinkphp6_0/1147857 "thinkphpWorkerman文档") 需要1个端口:8886 8886需要开启外网端口,或者用nginx映射 8887是内部使用,一定不要开启外部访问,只能内网使用 1、第一步连接WebSocket ```javascript //web端连接socket if(window.WebSocket){ //进行检测,确保浏览器支持WebSocket var webSocketbb = new WebSocket("ws://127.0.1.1:8886/?pid={:input('pid')}&userid=1112"); webSocketbb.onmessage = function(data){ var res = JSON.parse(data.data); console.log('收到消息', res); } } ``` ``` //uniapp版连接socket uni.connectSocket({ url: 'ws://192.144.202.110:8886/?pid=1&userid=11122', header: { 'content-type': 'application/json' }, method: 'GET' }); //接收消息 uni.onSocketMessage(function (res) { console.log('收到服务器内容:', res.data); // 在这里处理接收到的消息 }); ``` 连接时必须传pid,不传pid连接不上, userid为指定客户端id,如果不传则后台自动生成 前端到此已经连接上webSocketbb ### 发送消息 `joinRoom(roomId, data) { return new Promise((resolve, reject) => { const message = { type: 'joinRoom', roomId, data:data }; this.socket.send(JSON.stringify(message)); resolve(); }); }, 注意type为joinRoom为进入房间,type为message为发的消息,data为自定义字段,发送消息的时候可以传其他参数 2.后台进行进入房间 `WorkerHandle::joinRoom($pid,$userid, '666',$data);` $pid 为项目ID 第二个参数为userid,第三个参数为房间号,第四个参数为向房间内管理员推送的消息 3.给指定人发送消息 `WorkerHandle::sendMessageByUserId($pid,$userid,$msg);` $pid 为项目ID 第二个参数为userid,第三个参数为消息内容 4.给指定房间的所有用户发送消息 `WorkerHandle::sendMessageByRoomId($pid,$userid,$roomId,$msg)` $pid 为项目ID 第二个参数为userid,即发送消息的人 第三个参数为房间号,第四个参数为消息内容 5.给用户加入管理员 `WorkerHandle::SetAdmin($pid,$userid);` $pid 为项目ID,第二个参数为userid 当用户为管理员时,当前房间内有人进入和退出会给管理员推送消息 { 'type' => 'present',//present为通知全部 "state": 1, //1为进入房间0为退出房间 "userid": 11123,//用户id "create_time": 1726197762,//当前时间 "data": null,//这个是有人进入房间时传的$data参数,操作进入房间时可以把用户头像昵称传过来 "total": 2//当前房间人数 } ###骚操作 app\index\controller\common\Worker里的`onClose、onMessage、onConnect`3个方法已做反射执行类 当开发者开发应用时可以在当前应用内控制器目录新建Worker的类文件,可以新增这3个方法来执行你的后续操作;  如需自定义`onClose、onMessage、onConnect`这几个方法,可以在自己应用里写完之后`return false;`框架自带的方法就不会向下执行了;比如进房间设置密码可以自定义验证; 注意:反射执行类是根据连接的pid反射的,比如pid为9,在app表里对应的是demo应用就会反射到的app\demo\controller\Worker.php里,pid不能乱填 # 介绍 1.6.0版本后新增vit_websocket内存表 所有逻辑都可以查询此表来实现 ------ ##### websocket服务表(mysql数据库内存型) ------ | 字段名 | 类型 | 空(NULL) | 备注 | | ----------- | ------------ | -------- | ------------------- | | id | in(10) | □ | 自增主键 | | pid | int(11) | □ | 项目id | | room_id | varchar(255) | ☑ | 房间id | | socket_id | int(11) | □ | socket的id | | user_id | varchar(50) | ☑ | 应用的user_id | | create_time | int(11) | ☑ | 连接进入时间 | | user_ip | varchar(50) | ☑ | 登录IP | | is_admin | int(1) | ☑ | 1为管理员 | ## 绑定域名 需要在宝塔的网站配置文件里新增以下代码,保存后并重启NGINX ```html location /wss { proxy_pass http://127.0.0.1:8886; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; } ``` 配置好之后直接使用wss://您的域名/wss 提前配置好https证书 