tp5结合workerman+gateway实现简单的IM

2023-11-07 05:59

本文主要是介绍tp5结合workerman+gateway实现简单的IM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为何突然想到要实现IM,其实也是源于自己正在弄客服系统,所以想到用socket,而php里最为成熟并且多人使用的想必就是workerman了,而tp5也实现了结合workerman的包了点击打开链接

而我也是从这篇文章中借鉴修改的点击打开链接 可以看看这篇,写的很详细,我的引入是使用原生引入

composer require workerman/workerman
composer require workerman/gateway-worker
在借鉴的过程中,由于自己的细节处理不好导致一个小错误影响了自己大半天时间排查
$gateway = new Gateway('websocket://0.0.0.0:8282');$gateway->name = 'WebIMGateway';$gateway->count = 4;$gateway->lanIp = '127.0.0.1';$gateway->startPort = 2900;

就是在这里,8282端口前面的这个冒号,由于我是在linux虚拟机里开发,没注意到

在例子上有些地方自己删了有些地方自己修改过,毕竟每个人对功能的需求不一样,例子中没有加入心跳检测,但是workerman的介绍中,说明了心跳检测的重要性,那么我们有必要加入,很简单的两行代码

//心跳数据$gateway->pingData = '{"type":"ping"}';//心跳间隔$gateway->pingInterval = 30;

前端页面就是很简单的实现socket功能,当然我的虚拟机设置了虚拟域名

<script>var ws = new WebSocket("ws://adifree.ctapp.com:8282");ws.onopen = function() {var login_data = '{"type":"init","id":"2","username":"测试大神","avatar":"/uploads/20170907/609063cd7a33ad6170d06640765b8c99.png","sign":"yybsafhajshf"}';ws.send(login_data);console.log(login_data);console.log('socket握手成功');}ws.onmessage = function(res){console.log(res.data);var data = eval("("+res.data+")");switch(data['message_type']){// 服务端ping客户端case 'ping':ws.send('{"type":"ping"}');break;// 登录 更新用户列表case 'init'://console.log(data['id']+"登录成功");break;// 检测聊天数据case 'chatMessage':var dd = new Date(data.data.timestamp);var date = formatDate(dd);var chat_msg = '-->'+date+":"+data.data.content+"\n";var old_msg = $('#chat-content').val();$('#chat-content').val(old_msg+chat_msg);$('input[name=msg]').val('');console.log(date);console.log(dd);console.log(data.data);break;// 离线消息推送case 'logMessage':setTimeout(function(){}, 1000);break;// 用户退出 更新用户列表case 'logout':break;}}//发送消息$('#sendMsg').on('click',function(){var content = $('input[name=msg]').val();var res = new Array();res['mine'] = {avatar:"/uploads/20170907/609063cd7a33ad6170d06640765b8c99.png",content:content,id:2,mine:true,username:"测试大神",};res['to'] = {avatar:"abc.png",name:"kefu1",id:1,sign:"测试测试测试",type:"friend",username:"kefu1",};var mine = JSON.stringify(res.mine);var to = JSON.stringify(res.to);var chat_data = '{"type":"chatMessage","data":{"mine":'+mine+', "to":'+to+'}}';console.log(chat_data);ws.send( chat_data );var dd = new Date();var date = formatDate(dd);var chat_msg = date+":"+content+"\n";var old_msg = $('#chat-content').val();$('#chat-content').val(old_msg+chat_msg);console.log('send msg');})function formatDate(now) {var year = now.getFullYear(),month = now.getMonth() + 1,date = now.getDate(),hour = now.getHours(),minute = now.getMinutes(),second = now.getSeconds();return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;}</script>

前端代码大概如此,那么接下来开启服务

/usr/bin/php /var/www/html/aaa/server.php start

由于是测试,所以用户数据我都是写死的,方便调试,后续按照自己的需求,加入登录功能,绑定client_id就可以实现简单的IM聊天了,贴上自己写的简单的页面功能截图



后期通过优化界面,完善功能,一个简单的客服系统就可以出来了

这篇关于tp5结合workerman+gateway实现简单的IM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361694

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与