返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >workerman webman+GatewayWorker实现聊天室demo实例
  • 502
分享到

workerman webman+GatewayWorker实现聊天室demo实例

php 2023-09-07 11:09:56 502人浏览 泡泡鱼
摘要

workerman WEBman+GatewayWorker实现聊天室demo实例 说明 最近先来无事发现workerman的webman作为web框架很不错,想着写一个demo。于是就动手了,本人前

workerman WEBman+GatewayWorker实现聊天室demo实例

说明

最近先来无事发现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_id        Gateway::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 += 'Https://blog.csdn.net/index/joinRoom?room_id='+val.id+'">'+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 和 点赞哦。

来源地址:https://blog.csdn.net/IT_guoguo/article/details/128254585

--结束END--

本文标题: workerman webman+GatewayWorker实现聊天室demo实例

本文链接: https://lsjlt.com/news/398001.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • workerman webman+GatewayWorker实现聊天室demo实例
    workerman webman+GatewayWorker实现聊天室demo实例 说明 最近先来无事发现workerman的webman作为web框架很不错,想着写一个demo。于是就动手了,本人前...
    99+
    2023-09-07
    php
  • python socket实现聊天室
    本文实例为大家分享了python socket实现聊天室的具体代码,供大家参考,具体内容如下 server端 import socket import json,struct from concurrent.fu...
    99+
    2022-06-02
    python socket 聊天室
  • Python实现web聊天室
    使用Python模块中的select模块实现web聊天室功能select模块Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持sel...
    99+
    2023-01-31
    聊天室 Python web
  • Java聊天室之实现聊天室客户端功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:实现聊天室客户端。运行程序,用户登录服务器后,可以从用户列表中选择单个用户进行聊天,也可以选择多个用户进行聊天。 二、...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 客户端
  • Java聊天室之实现聊天室服务端功能
    目录一、题目描述二、解题思路三、代码详解多学一个知识点一、题目描述 题目实现:实现聊天室服务器端功能。运行程序,服务端等待客户端连接,并显示客户端的连接信息。 二、解题思路 创建一个...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 服务端
  • Unity实现聊天室功能
    本文实例为大家分享了Unity实现聊天室功能的具体代码,供大家参考,具体内容如下 简单聊天室功能,客户端发送消息后,服务器接收到消息后分发到其它客户端上并显示聊天内容 聊天室服务器 ...
    99+
    2024-04-02
  • C++实现多人聊天室
    本文实例为大家分享了C++实现多人聊天室的具体代码,供大家参考,具体内容如下 UDP 服务端代码: // Test_Console.cpp : 定义控制台应用程序的入口点。 //...
    99+
    2024-04-02
  • Java实现聊天室界面
    本文实例为大家分享了Java实现聊天室界面的具体代码,供大家参考,具体内容如下 服务器端: package Server;   import java.awt.Toolkit; im...
    99+
    2024-04-02
  • Springboot+netty实现Web聊天室
    目录一、项目的创建二、代码编写三、运行效果一、项目的创建 新建Spring项目: 选择JDK版本: 选择Spring Web: 项目名称和位置的设置: 二、代码编写 导入.j...
    99+
    2024-04-02
  • Java实现NIO聊天室的示例代码(群聊+私聊)
    目录功能介绍文件UtilsFinalValueMessageNioServerNioClient功能介绍 功能:群聊+私发+上线提醒+下线提醒+查询在线用户 文件 U...
    99+
    2024-04-02
  • Python聊天室实例程序分享
    上一篇 我们学习了简单的Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型。本文再通过一个例子来加强一下对 Socket 编程的理解。 ...
    99+
    2022-06-04
    实例 聊天室 程序
  • Android 基于Socket的聊天室实例
    Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行...
    99+
    2022-06-06
    聊天室 socket Android
  • AngularJS+Node.js实现在线聊天室
    不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍,对于基本的使用依然有很多说不清道不明的疑惑,于是决定通过做...
    99+
    2022-06-04
    在线 聊天室 AngularJS
  • android socket聊天室功能实现
    前提概要 笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对...
    99+
    2022-06-06
    socket Android
  • 如何实现react-native聊天室
    这篇文章将为大家详细讲解有关如何实现react-native聊天室,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言最近都沉浸在react native原生app开发...
    99+
    2024-04-02
  • Java Socket模拟实现聊天室
    使用Java Socket模拟实现了一个聊天室,实现了基本的私聊以及群聊。分为服务器端和客户端,下面我来介绍一下实现的步骤。 服务器端 服务器端是聊天室的核心所在,主要用来处理客户端...
    99+
    2024-04-02
  • Java实现多线程聊天室
    本文实例为大家分享了Java实现多线程聊天室的具体代码,供大家参考,具体内容如下 之前呢已经用单线程的方式来实现了聊天室,但其实它的功能并不齐全,下面用多线程来实现,功能会比单线程聊...
    99+
    2024-04-02
  • Java Socket实现简易聊天室
    Java-Socket编程实现简易聊天室(TCP),供大家参考,具体内容如下 实现一个服务器接收多个客户端 测试: 首先启动服务器,然后启动三个客户端,输入三个不同的用户名,分别在聊...
    99+
    2024-04-02
  • Java怎么实现NIO聊天室
    这篇文章给大家分享的是有关Java怎么实现NIO聊天室的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。功能介绍功能:群聊+私发+上线提醒+下线提醒+查询在线用户文件Utils需要用maven导入下面两个包 ...
    99+
    2023-06-15
  • Java NIO实现聊天室功能
    本文实例为大家分享了Java NIO实现聊天室功能的具体代码,供大家参考,具体内容如下 代码里面已经包含了必要的注释,这里不详述了。实现了基本的聊天室功能。 常量类: publi...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作