目录

一、安装扩展

二、websocket配置

1.worker_server.php

​编辑

注意事项分享:数据库形式

2.新建控制器Worker(名字随意)

总结


一、安装扩展

cd到项目下进行扩展安装:

composer require topthink/think-worker

扩展安装后根据TP官方提供的文档进行启动

Workerman · ThinkPHP6.0完全开发手册 · 看云

注意事项:扩展安装好后会在 项目根目录 下面新增一个文本文件,用作启动websocket(很方便),测试开启直接双击即可

1.将两行命令加入文本文件

php think worker:serverpause

2.更改文本文件后缀

Socket.bat

3.扩展安装成功后会在项目config文件下生成两个文件,配置只需要更改worker_server.php

二、websocket配置

1.worker_server.php

  重要的配置要更改这两个地方:端口:'port'           => 2345, // woker文件:'worker_class'   => 'app\user\controller\Worker', 自定义Workerman服务类名(独立的woker控制器路径)

注意事项分享:数据库形式

2.新建控制器Worker(名字随意)

<?phpdeclare(strict_types=1);namespace app\user\controller;use think\worker\Server;class Worker extends Server
{/**websocket */protected $socket = 'websocket://0.0.0.0:2345';/**定义用户组*/protected $uidArr = [];/*@method      发送消息@param          data              数据*/public function onMessage($connection, $data){/**对接收消息做json处理*/$rest                = json_decode($data);/**用户连接成功后向后端发送 type=bind,uid=当前连接用户uid 的绑定请求 */if ($rest->type      == 'bind' && !isset($connection->uid)) {/**将请求用户id存在用户组中 */$connection->uid = $rest->uid;$this->uidArr[$connection->uid] = $connection;echo 'user:' . $rest->uid . 'bind';}/**群聊 */if ($rest->type == "text") {/**模型实例*//**这里做数据库获取该群有哪些成员的操作,这里我用测试数据 */$group_user_ids_arr = [1,2,3];/**这里做将信息存入数据库并获取信息id的逻辑 */$saveMsg = $msgModel->insertGetId(['from_user_id'   => $rest->from_user_id, //来自'to_gid'         => $rest->to_gid,       //给谁'from_nickname'  => $rest->from_nickname,//来自人昵称'from_headimg'   => $rest->from_headimg, //来自人头像'datetime'       => $rest->datetime,     //消息时间'msg'            => $rest->msg,          //消息内容'type'           => $rest->type          //消息类型:文本...]);/**将新消息id存入发送数据中方便做后续撤回等操作*//**解析信息 */$newData = json_decode($data, true);/**赋值信息数据自增id */$newData['id'] = $saveMsg;/**针对群用户发消息 */foreach ($group_user_ids_arr as $key => $value) {/**针对在线用户并且!!排除自己(前端配合将消息push到当前发送消息的用户)!!发消息 */if (isset($this->uidArr[$value]) && $value != $rest->from_user_id) {$conn = $this->uidArr[$value];/**发送信息 */$conn->send(json_encode($newData));//前端回调后要判断当前接收消息的群id将消息放进对应的群,不然会出现用户在线不管在哪个群都会收到消息的问题!!!}}}}/*** 当连接建立时触发的回调函数* @param $connection*/public function onConnect($connection){print_r('连接成功');}/*** 当连接断开时触发的回调函数* @param $connection*/public function onClose($connection){print_r('用户断开了链接!');}/*** 当客户端的连接上发生错误时触发* @param $connection* @param $code* @param $msg*/public function onError($connection, $code, $msg){echo "error $code $msg\n";}/*** 每个进程启动* @param $worker*/public function onWorkerStart($worker){}
}

总结

此方法需要前端配合判断当前接收信息的群id将消息放进对应的群,不然会出现用户在线不管在哪个群都会收到消息的问题!!!

thinkphp6+websocket 群聊实现相关推荐

  1. websocket 群聊和单聊实现简单在线客服

    根据菜鸟教程上的解释: WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间 ...

  2. websocket 群/单聊 基础

    websocket 介绍 1.用户A 给 用户B 发送一条消息 问 用户B 多久可以收到 用户A 的消息电子邮件 - 可能是 一周期的时间 及时性很差传达室大爷 - 消息托付 及时性很差即时通讯 - ...

  3. websocket学习和群聊实现

    WebSocket协议可以实现前后端全双工通信,从而取代浪费资源的长轮询.在此协议的基础上,可以实现前后端数据.多端数据,真正的实时响应.在学习WebSocket的过程中,实现了一个简化版群聊,过程和 ...

  4. springboot整合websocket实现群聊

    1.依赖 2.websocket配置: 3.前端 4.注意事项 效果: 也可以打开新窗口连接一个新用户发消息 1.依赖 <dependency><groupId>org.spr ...

  5. js 链接websocket马上断开_WebSocket之基于STOMP协议的广播模式实现群聊功能

    又是一个老套的古诗词赏析 不恨此花飞尽,恨西园.落红难缀.--苏轼<水龙吟·次韵章质夫杨花词> WebSocket与STOMP协议 相关简介 WebSocket WebSocket 是一种 ...

  6. (3)websocket实现单聊和群聊

    1 资源下载地址  http://download.csdn.net/detail/jianfpeng241241/9325049 2  群聊图 2.1 zhangsan 发给所有人的图 2.2 发送 ...

  7. websocket(二)--简单实现网页版群聊

    websocket可以实现服务端的消息推送,而不必在客户端轮询,大大的节省的资源,对于实时通讯来说简直是个大喜讯. 在上一篇文章中介绍了协议握手,这篇文章将通过实现简单的群聊来帮助进一步了解webso ...

  8. Node + WebSocket + Vue 聊天室创建群聊/加入群聊功能 – 第五章

    前言 本次算是做了一个小小的专题吧,"Nodejs + WebSocket + Vue实现聊天室功能",目前还在一步一步推进,之前已经可以一对一.一对多聊天了,今天就来创建群聊组, ...

  9. 基于WebSocket实现一个简易的群聊功能

    本文主要来讲解如何使用WebSocket来实现一个简易的群聊功能 引入maven依赖 <dependency><groupId>org.springframework.boot ...

最新文章

  1. 面试大法——算法、Python、机器学习等笔试面经资源 | 干货收藏
  2. Dart In Action -Dart快速入门(二)
  3. CSP浏览器安全策略备忘
  4. Learn Blockchains by Building One
  5. 计算机视觉与深度学习 | Matlab实现单目视觉里程计基于SURF特征(代码类)
  6. ThinkPHP跨控制器调用方法
  7. v8学习笔记(三) 运行时环境
  8. 大剑无锋之UNION 和 UNION ALL (SQL)【面试推荐】
  9. android 手机壁纸源码,Android工程实现换壁纸功能【附源码】
  10. A study on ILC for linear discrete systems with single delay
  11. zookeeper运维
  12. Atitit index threod type 索引原理与类型 种类 目录 1.1. 每个文档在经过底层的存储引擎持久化后 1 2. MongoDB索引类型 2 2.1. 包括单字段索引、复合索引
  13. 猫眼电影的android源代码!,微信小程序入门demo之猫眼电影
  14. 程序员的自我吐槽,来自专业人士的扎心吐槽!
  15. OpenWRT安装SIM7600CE 4G模块驱动
  16. 华为董事长梁华:推动数字人才培养,跨越数字鸿沟,促进可持续发展
  17. SqlParameter应用实例 实验日记
  18. 机器学习梯度下降法应用波士顿房价预测
  19. 计算机毕业论文附录的模板,毕业论文附录的格式和写法
  20. P6035CDN打印机 kyocera_京瓷P8060cdn驱动

热门文章

  1. 【时间复杂度】你还在担心时间复杂度太高吗?
  2. Annotation(注释):基本Annotation
  3. CSS中的常见单位(px,%,em,rem,vw,vh,vmax,vmin,calc)
  4. java——OOA,OOD,OOP
  5. 向量维数与向量空间维数的区别
  6. Linux c — void类型变量和指针
  7. JavaWeb项目案例(一)
  8. jenkins创建新用户_Jenkins凭据管理
  9. 常见的 Git 错误解决方法
  10. Eclipse插件版本