ThinkPHP 5.1+PHPSocket.IO实现websocket搭建聊天室+私聊 – 行星带

您所在的位置:网站首页 thinkphp启动websocket ThinkPHP 5.1+PHPSocket.IO实现websocket搭建聊天室+私聊 – 行星带

ThinkPHP 5.1+PHPSocket.IO实现websocket搭建聊天室+私聊 – 行星带

2024-01-31 17:16| 来源: 网络整理| 查看: 265

关于使用ThinkPHP 5.1 + PHPSocket.IO搭建简单的websocket聊天案例见之前的一篇文章(ThinkPHP 5.1下使用PHPSocket.IO实现websocket通讯),在此基础上做了较大的更新,本项目github地址:

https://github.com/hsu1943/thinksocketio

本项目持续更新,有用到的朋友不要忘了点一下STAR,谢谢!

鉴于大家对这一功能是需求很多,对之前的简单的消息推送做了功能更新,主要功能在下面,前端界面实在看不下去,仅仅实现功能,更多的是让大家理解如何去搭建。

部分功能截图

公频聊天:

websocket聊天室

一对一私聊

websocket一对一私聊

广播推送系统消息

ThinkPHP 5.1+PHPSocket.IO广播推送系统消息

指定用户推送消息 ThinkPHP 5.1+PHPSocket.IO指定用户推送消息

目前功能(截至2019年1月23日) 公频聊天 一对一私聊 加入聊天室提示 离开聊天室提示 私聊消息在公频提醒 数据库

为了记录聊天记录使用了两张数据表,如果不需要记录可以将代码中写入消息操作的代码注释即可。

消息记录msg表

CREATE TABLE `msg` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `msg` varchar(255) DEFAULT NULL COMMENT '消息', `from` varchar(255) DEFAULT NULL COMMENT '来自用户', `to` varchar(255) DEFAULT NULL COMMENT '发送给用户', `type` varchar(10) DEFAULT NULL COMMENT '消息类型', `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=213 DEFAULT CHARSET=utf8mb4 COMMENT='消息记录'; 后期计划加入功能 聊天室人数统计(已完成) 私聊消息提醒 (已完成) 自定义用户昵称 (已完成) 历史消息查看 输入中状态提示

以上功能会陆续加入,视博主时间而定,具体更新时间不做承诺。本文会随着功能更新保持更新,以下内容未更新记录。

使用说明

以下说明假定已经为项目public目录绑定了域名test.com并正确部署服务器,访问test.com能看到TP5默认首页。

如果修改了配置或者代码,请重新运行服务端,否则代码不生效。

安装 git clone [email protected]:hsu1943/thinksocketio.git cd thinksocketio composer install -vvv 配置

模板文件/application/socketio/view/index/index.html和/application/socketio/view/index/chat.html中socket修改为你的socket服务端地址,默认测试端口2021,端口号可以在/config/socketio/param.php中配置。这里是本机测试,用http://127.0.0.1:2021。

var socket = io('http://127.0.0.1:2021'); 使用数据库记录消息:

如果你需要使用数据库存储消息,按照下面的步骤打开配置,打开配置后系统会根据昵称将所有聊天记录写入数据库msg表中,包括主动推送的消息;

在config/database.php中配置数据库,保证数据库能正确连接; 导入根目录下msg.sql到数据库; 在config/socketio/param.php中将save_msg修改为true(默认是false,不写入到数据库);

这里说明一下,请保证数据库能正确连接并且里面有正确的表结构(第二步导入表)再进行第三步配置。

主动推送系统消息接口

修改配置文件/config/socketio/param.php中的配置为监听消息推送地址,这里本地测试,使用本地2121端口;

return [ 'ws' => [ 'apiHost' => 'http://127.0.0.1:2121', ], ];

该地址即系统推送消息地址,参数:

to:接收人 content:消息

两种用法:

其他项目POST或GET请求接口即可推送消息 向username推送系统消息 http://test.com/system?to=username&content=系统推送消息测试 广播消息 http://test.com/system?content=系统推送消息测试

http://test.com/system这是本项目使用上面的监听地址做的一个消息推送demo,详情看源代码。

本项目中推送系统消息:

已将推送封装在Msg的模型中,使用:

$res = Msg::send($to, $content); return $res == 'ok' ? '系统消息推送成功' : '系统消息推送失败'; 测试

运行服务端:

php ./public/server.php

这里可以将输出写到某个日志文件中,或者使用supervisor来管理服务端。

访问以下地址即可进入公频:

http://test.com/socketio

点击消息列表中的用户名即可进入私聊。

更新 2019-12-19 增加服务端的输出,以及端口配置项,保存数据库加上错误处理,更新项目README; 2019-06-19 增加在线人数统计,在线用户列表,修改昵称,添加系统主动推送接口(广播或私信); ThinkPHP 5.1+PHPSocket.IO实现websocket搭建聊天室+私聊

原文链接:https://beltxman.com/2329.html,若无特殊说明本站内容为 行星带 原创,未经同意禁止转载。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3