IM即时通信多房间聊天室仿微信聊天(概述)

最近客户项目里面需要嵌入一个聊天室功能来打造社区生态,增加用户黏度。为了打造单项的引流目的,剔除了聊天中的加好友和私聊功能。这个目前比较忙不考虑短期内更新。
聊天室整体风格都是仿微信界面的,包括了发文字、语音、图片和视频消息。不依赖日任何收费第三方组件!可以拿去即用
下面是效果图:

1、实现通信

聊天室最重要的一步当然是实现通信了,这里我用的是基于workerman的Gateway Worker链接已经给了,不熟悉的可以去看看他的官方文档;
由于我的项目中用户的头像、昵称包括房间的权限啊之类的信息都是深度定制依赖于整个app的,所以我这边考虑的是将GatewayWorker与后台服务结合的方式,这样子直接将Gateway服务作为分发工具了而逻辑的处理都交给自己的后台服务去做就行了。
下面讲讲具体的集成方法:
(1)、GatewayClient安装:**
将下载好的GatewayClient集成在自己后台项目中,具体放在什么目录根据实际情况而定,总之后面引入的时候自己知道存放的路径能将它正确引入就可以了;
(2)、自己项目中引入,这里我用的是php,引入页面如下:

namespace Api\Controller;
use GatewayClient\Gateway;
require_once dirname(__DIR__) . "/libs/GatewayClient/Gateway.php";
use think\Log;

(3)、启动GatewayWorker服务
在启动GatewayWorker之前呢我们需要查看一下它的几个重要的端口配置
端口的配置都在文件名为start_gateway.php这个文件中主要配置两个端口

// gateway 进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway("websocket://0.0.0.0:23426");
// gateway名称,status方便查看
$gateway->name = 'nywSocket';
// gateway进程数
$gateway->count = 1;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';

$gateway配置的是客户端与其进行websocket连接的服务器地址和端口
$gateway->registerAddress是服务端与之通信的服务器地址和端口
配置好了之后就是正式启动了,至于怎么启动,官方文档已经讲的很清楚了:
windows:直接双击运行start_for_win.bat文件
Linux:首先进入start.php所在的文件目录然后执行命令

php start.php start

就可以启动GatewayWorker服务了。
但是注意一点!既然是做即时通信,那我们肯定是希望这个服务一直保持在后台运行,但是上面的命令执行完之后,当我们关闭服务器终端命令窗口,则服务也会立刻停止,所以我们需要执行一下命令来运行服务:

php start.php start -d

这样当我们关闭终端之后服务仍然保持在后台运行不中断
(4)、网站页面建立与GatewayWorker的websocket连接
这个很简单直接上代码:

let ws = new WebSocket('ws://118.195.189.231:23426');

118.195.189.231是我部署GatWayWorker的服务器地址,实际你们自己项目中替换成你们自己的地址就可以了
(5)、GatewayWorker发现有页面发起连接时,将对应连接的client_id发给网站页面
在GateWayWorker的Event.php文件中进行操作:

 /*** 当客户端连接时触发* 如果业务不需此回调可以删除onConnect* * @param int $client_id 连接id*/public static function onConnect($client_id){Gateway::sendToClient($client_id, json_encode(array('action_type'      => 'init','client_id' => $client_id)));}

我们为什么需要这个client_id呢,其实是为了后续的多房间聊天功能准备的(后续讲到多房间功能的时候在详细讲)
关于client_id:client_id固定为20个字符的字符串,用来全局标记一个socket连接,每个客户端连接都会被分配一个全局唯一的client_id;
client_id不能自定义,由GatewayWorker自动生成;
如果client_id对应的客户端连接断开了,那么这个client_id也就失效了。当这个客户端再次连接到Gateway时,将会获得一个新的client_id。也就是说client_id和客户端的socket连接生命周期是一致的。
client_id一旦被使用过,将不会被再次使用,也就是说client_id是不会重复的,即使分布式部署也不会重复;
只要有client_id,并且对应的客户端在线,就可以调用Gateway::sendToClient($client_id, $data)等方法向这个客户端发送数据;
(6)、客户端接收GateWayWorker发送过来的消息

onmessage(){ws.onmessage = e => {let msg = JSON.parse(e.data);console.log(msg)let action_type = msg.action_type;};
}

打印msg我们就可以看到就是步骤(5)中GateWay发送过来的消息:

'action_type' => 'init',
'client_id' => $client_id

至此我们就实现了GatWayWorker和客户端的基本连接了…
时间有限其他部分的详细介绍会陆续更新,希望大家一起交流!
下一节讲IM即时通信多房间聊天室仿微信聊天(服务器自定义处理客户端消息)

IM即时通信多房间聊天室仿微信聊天(一)相关推荐

  1. IM即时通信多房间聊天室仿微信聊天(二)

    IM即时通信多房间聊天室仿微信聊天(服务器自定义处理客户端消息) 在IM即时通信多房间聊天室仿微信聊天(一)中我们已经搭建了基本的通信架构,接下来重点就是如何在自己的后台接收并处理客户端用户的消息了 ...

  2. IM即时通信多房间聊天室仿微信聊天(四)

    聊天记录的保存和展示 IM即时通信多房间聊天室仿微信聊天(一) IM即时通信多房间聊天室仿微信聊天(二) IM即时通信多房间聊天室仿微信聊天(三) 聊天消息的保存我们直接在服务端接收到客户端发送的消息 ...

  3. vue整合uniapp_uni-app仿微信App界面|vue+uniapp聊天室|仿微信朋友圈

    项目简介 基于uni-app+vue+vuex+uniPop+swiper等技术开发的仿微信聊天室uniapp-chatroom项目,类似vue及小程序api语法使开发更加方便,实现了发送图文消息.表 ...

  4. vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版

    一.项目介绍 基于Vue2.5.6+Vuex+vue-cli+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术混合架构开发的仿微信web端聊天室- ...

  5. react仿微信web版聊天室|仿微信客户端react版

    基于react+react-dom+react-router-dom+redux+react-redux+webpack+nodeJs等技术混合开发的手机端仿微信界面聊天室--reactChatRoo ...

  6. h5移动端聊天室|仿微信界面聊天室|h5多人聊天室

    今年的FIFA世界杯甚是精彩,最近兴致高涨就利用HTML5开发了一个手机端仿微信界面聊天室,该h5聊天室采用750px全新伸缩flex布局,以及使用rem响应式配合fontsize.js,页面弹窗则是 ...

  7. php类似微信聊天框,仿微信聊天功能

    摘要: 微信聊天 window.onload = () => { // 获取按钮 let btn = document.getElementById('btn'); // 获取输入框 let t ...

  8. h5仿微信聊天室weChatRoom|仿微信聊天界面

    html5仿微信聊天|h5仿微信聊天室|仿微信聊天界面|仿微信群聊/单聊 平时一闲下来就撸项目代码,最近一直在开发h5仿微信聊天项目,使用到了html5+css3+zepto+iscroll+swip ...

  9. electron-vue仿微信聊天客户端|electron聊天应用

    使用Electron+Vue+electron-vue+vuex+Node+vue-video-player等技术构建开发的高仿微信客户端聊天室,实现了消息发送/表情,光标处插入表情,图片/视频预览, ...

  10. react仿微信聊天室|react即时聊天IM系统|react群聊

    react+redux仿微信聊天IM实战|react仿微信界面|react多人群聊天室 最近一直捣鼓react开发,就运用react开发了个仿微信聊天室reactChatRoom项目,基于react+ ...

最新文章

  1. leetcode 206 Reverse Linked List
  2. linux qcom LCD framwork
  3. cisco 2960-24 配置(生产环境)
  4. 1095. 山脉数组中查找目标值
  5. 第8章-常用优先级和css3
  6. centos6.5安装mongodb2.6
  7. [wp7游戏]wp7~~超级血腥类游戏~~集合贴~~
  8. 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
  9. 【转帖】Eclipse快捷键指南
  10. 计算机等级考试二级要学PS,关于计算机等级考试题库你所不知道的那些一级PS操作题...
  11. 中心极限与大数定理律的关系_【小结】实数域的基本定理
  12. 质谱流式细胞技术 小笔记
  13. 十首最美的诗,醉美了整个秋天
  14. Linux基础-用户管理与组管理
  15. 大一上学期Python学习心得体会
  16. 如何在本地运行jsp文件
  17. 内嵌模式搭建Hive
  18. cobar mysql部署方案_Cobar的安装和配置步骤
  19. 花千骨服务器无响应,花千骨出现游戏闪退 解决闪退方案
  20. 快手直播前期怎么引流?快手新人主播怎么做涨粉

热门文章

  1. “电脑族”保健 六项注意
  2. python图标变成了白色_怎么解决图标变成白色图标的问题
  3. 杭州好玩景点攻略884
  4. Personalized Defect Prediction
  5. 深度学习(一、入门)
  6. 唯美的英文短文!!!
  7. Redis集群搭建——新手上路
  8. sonar代码审查问题分析
  9. 时代》杂志评出的100部最佳英语小说(含下载)
  10. 任正非:副职要精于管理,正职要敢于进攻