workerman webman+GatewayWorker实现聊天室demo实例
admin
2024-03-29 06:33:04
0

说明

最近先来无事发现workerman的webman作为web框架很不错,想着写一个demo。于是就动手了,本人前端不太好,所以页面较丑,不要介意哈哈哈。

官方文档

https://www.workerman.net/

workerman 真的很不错,社区环境也不错,基本上有问题都有答复。有时间我也会多研究下,后面也会分享出来

重磅

demo地址: https://gitee.com/xiaoqiaoniubi/my-webman-chat

  1. 先下载下项目,将根目录下的webman-chat.sql 导入至数据库,数据库名称为:webman-chat。可在数据库配置文件中修改
  2. 执行 composer install
  3. windows环境:直接双击根目录下的windows.bat的文件,并在网站中访问localhost:8787
  4. linux环境:防火墙等开放7272端口(websocket),在根目录上执行 php start.php start

代码片段

  1. 服务端监听websocket:
    位置:根目录/plugin/webman/gateway/Events.php
    public static function onWebSocketConnect($client_id, $data){// 拿到连接时携带的token 查询uid$getData = $data['get'];$userModel = new User();$userInfo = $userModel -> getUserInfoByToken($getData['token']);if (empty($userInfo)) { // token过期send($client_id,'账号信息错误,请重新登录',['type' => MsgType::LOGIN_ERROR,]);sleep(1); // 延迟一秒断开链接return Gateway::closeClient($client_id);}$uid = $userInfo -> id;// 重复上线验证if (count(Gateway::getClientIdByUid($uid)) > 0) {send($client_id,'当前账号已在线,请换个账号',['type' => MsgType::ERROR,]);sleep(1); // 延迟一秒断开链接return Gateway::closeClient($client_id);}// uid 绑定 client_idGateway::bindUid($client_id,$uid);// 用户是否创建过房间,是否显示创建房间 or 我的房间 按钮$roomModel = new Room();$roomInfo = $roomModel -> getUserRoom($uid);$roomList = $roomModel -> getRoomListByIds();send($client_id,'连接成功',['client_id' => $client_id,'type' => MsgType::LOGIN,'room_id' => empty($roomInfo) ? 0 : $roomInfo -> id,'room_list' => $roomList,]);}public static function onMessage($client_id, $message){$message = json_decode($message,true);$data = $message['data'] ?? [];switch ($message['type']) {case MsgType::JOIN: // 加入房间$userModel = new User();$userInfo = $userModel -> getUserInfoByToken($data['token']);// 加入房间Gateway::joinGroup($client_id,$data['room_id']);// 获取房间列表$roomUserList = Gateway::getUidListByGroup($data['room_id']);$finalUserList = [];foreach ($roomUserList as $key => $val) {// 查询用户昵称$userInfo = $userModel -> getUserInfoByUid($val);$finalUserList[] = ['user_id' => $val,'nickname' => empty($userInfo) ? '未知用户' : $userInfo -> nickname];}// 向房间广播send_to_group($data['room_id'],'请求成功',['type' => MsgType::JOIN,'nickname' => $userInfo -> nickname,'online_num' => count($finalUserList),'online_list' => $finalUserList,]);break;case MsgType::SEND_MSG:$userModel = new User();$userInfo = $userModel -> getUserInfoByToken($data['token']);// 广播到房间send_to_group($data['room_id'],'请求成功',['type' => MsgType::SEND_MSG,'send_user_nickname' => $userInfo -> nickname,'send_user_id' => $userInfo -> id,'send_content' => $data['content'],]);break;default:send($client_id,'请求成功',['client_id' => $client_id]);break;}}
  1. 客户端监听服务端websocket:
    位置:根目录/public/static/chat_js/base.js
function onmessage(e) {var data = JSON.parse(e.data);var fullData = data;data = data.data;switch(data.type){case 'login':// 当前用户有房间则显示进入入口,否则显示创建入口if (data.room_id > 0) {$('.create_room .join_room').attr('data-room-id',data.room_id);$('.create_room .join_room').show();$('.do_create_room').hide();} else {$('.create_room .join_room').hide();$('.do_create_room').show();}client_id = data.client_id;// 房间列表更新$('.room_list').empty();var roomDom = '';$.each(data.room_list,function(i,val) {roomDom += ''+val.room_name+'

';});$('.room_list').append(roomDom);break;case 'join':$('.onlineNum').text(data.online_num);// 重新渲染房间列表$('.online_user_list').empty();var onlineUserDom = '';$.each(data.online_list, function(i,val){onlineUserDom += '
' +'用户'+(i+1)+':' +''+val.nickname+' 已加入' +'
'});$('.online_user_list').append(onlineUserDom);break;case 'send_msg':var msgDom = '';msgDom += '

'+data.send_user_nickname+' 说:'+data.send_content+'

';$('.msg_content').append(msgDom);break;case 'login_error':showLogin();break;default:break;} }

结尾

大家有问题可以留言哦,不要吝啬star 和 点赞哦。

相关内容

热门资讯

100亿元,千亿能源巨头要“造... 从“手搓装置”到全球领先,一家民营企业的可控核聚变逆袭之路。《中国企业家》记者 马吉英见习记者 苗诗...
小米汽车,又出事了 小米汽车,... 欢迎关注我的好朋友:闺蜜财经图片由AI生成撰文|杆姐&编辑|爱丽丝小米又出事儿了。9月19日,据国家...
降温了,也降息了 降温了,也降... 晚上好,一起看看本周发生了哪些大事吧~希望我们的解读,能让你收获有用又易懂的理财知识,逐渐培养经济敏...
笑死!国产布加迪来了,比保时米... 不到一个月,追觅的PPT造车,它来了。没错,追觅汽车在微博发布首款新车渲染图。从渲染图来看,追觅首款...
电池指数基金如何“捕捉”电池技... 《金证研》 巽风/作者近日,工信部发布《电子信息制造业2025—2026年稳增长行动方案》,提出支持...
什么样的家庭,孩子长大后最有底... 点击 “简七读财” ,发送消息“ 理财 ”小白轻松入门~晚上好,我是简七编辑部的冰冰。前几天跟朋友...
155亿可转债落地!中国太保“... 出品|达摩财经又一家大型险企成功发行H股零息可转债。9月18日,中国太保(601601.SH)发布公...
热门中概股集体上涨,蔚来涨3%... 记者丨庞华玮 倪雨晴编辑丨巫燕玲 朱益民 黎雨桐北京时间9月19日晚间,美股三大指数高开,截至22时...
深夜,暴涨!美联储,突爆大消息... 超级赛道突然爆发。北京时间9月19日晚,美股盘初,量子计算概念股集体拉升,昆腾(Quantum Co...
东北退休女工,造出一个纳税百亿... 都说中国人的一生都摆脱不了年龄焦虑,人生过半,估计大多数人都想轻松轻松了。你肯定想不到,退休之后,还...