ThinkPHP 5.1+PHPSocket.IO实现websocket搭建聊天室+私聊

关于使用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实现websocket多人聊天及私聊

目前功能(截至2019年1月23日)

  1. 公频聊天
  2. 一对一私聊
  3. 加入聊天室提示
  4. 离开聊天室提示
  5. 私聊消息在公频提醒

数据库

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

消息记录msg表

CREATE TABLE `msg`  (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息',
  `from` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '来自用户',
  `to` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发送给用户',
  `type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '消息类型',
  `create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息记录'

后期计划加入功能

  1. 聊天室人数统计(已完成)
  2. 私聊消息提醒 (已完成)
  3. 自定义用户昵称 (已完成)
  4. 历史消息查看
  5. 输入中状态提示

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

2019-06-19更新:

基本完成,除了UI意外聊天室功能已具备,为了大家更好的集成到项目中,添加了系统消息主动推送接口及监听。

主动推送系统消息接口

修改配置文件/config/socketio/app.php中的配置为监听消息推送地址:

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

其他项目POST,GET请求接口即可推送消息

向username推送系统消息
http://test.com/system?to=username&content=系统推送消息测试
广播消息
http://test.com/system?content=系统推送消息测试

其中http://test.com为本项目可访问地址。
本项目中推送系统消息:

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

UPDATE

  • 2019-06-19 增加在线人数统计,在线用户列表,修改昵称,添加系统主动推送接口(广播或私信);

7条评论

  1. 下载了你的项目不能很友好的运行 希望能够得到你的指点 我的q 799345375

发表评论

电子邮件地址不会被公开。 必填项已用*标注