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 和 点赞哦。

相关内容

热门资讯

姆巴佩半场数据:助攻王的崛起,... 2026年6月27日,世界杯小组赛I组第3轮,挪威与法国的对决正如火如荼地进行着。在这个备受瞩目的比...
凌云智矿完成千万美元PreA轮... 5月27日消息,凌云智矿(LynAI Mines Ltd)宣布完成Pre-A轮千万美元融资,由头部财...
聚焦直播带货、外卖等,市场监管... 5月27日消息,据了解,市场监管总局部署各地市场监管部门自5月至12月开展信用赋能整治“内卷式”竞争...
工业气体概念震荡回升,中船特气... 5月27日消息,工业气体概念日内震荡回升,中船特气涨超10%,创历史新高,和远气体、广钢气体、华特气...
公安部:累计查纠涉企执法问题5... 5月27日消息,国务院新闻办公室举行“开局起步‘十五五’”系列主题新闻发布会,介绍“推进全面依法治国...
MiniMax申请注册Mavi... 5月27日消息,天眼查知识产权信息显示,近日,MiniMax关联公司上海稀宇极智科技有限公司申请注册...
美股科技股集体承压,市场是否正... 美股科技板块本周延续跌势,表面导火索是OpenAI可能推迟IPO,但分析师指出,智谱的低成本AI模型...
十五五规划显示,绿氢,将让光伏... 今天这篇政策解读,对赶碳号这样一家草根自媒体来说的确有些难度。但对行业的热情所在,责任所在,只能硬着...
沃什首批重要任命之一:任命两位... 美联储新任主席沃什就任初期迅速组建核心顾问团队,从内部擢升两位深耕数十年的资深经济学家担任顾问,为其...
苹果再失大将!报道:Visio... 苹果公司高管出走潮持续蔓延。负责Vision Pro头显和智能眼镜业务的最高主管Paul Meade...