码迷,mamicode.com
首页 > 其他好文 > 详细

使用Gateway-Worker实现多人分组实时聊天 结合第三方tp

时间:2017-09-12 17:45:57      阅读:1052      评论:0      收藏:0      [点我收藏+]

标签:ndt   img   格式   ajax   系统   定义   mysq   发送   api   

一、基础知识
1、Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。
2、GatewayWorker基于Workerman开发的一个框架,支持多协议多端口监听,支持分布式多机部署,用于快速开发长连接应用,例如移动通讯、物联网、智能家居、游戏服务端、聊天室等等。
3、gateClient是用来辅助 workerman或者是gateway进行用户分组以及向用户发送信息的组件,同时,能够快速便捷的将原有系统的uid和clientid绑定起来。
官网:http://www.workerman.net/

二、基本理论
1、基本原则
现有mvc框架项目与GatewayWorker独立部署互不干扰
所有的业务逻辑都由网站页面post/get到mvc框架中完成
GatewayWorker不接受客户端发来的数据,即GatewayWorker不处理任何业务逻辑,GatewayWorker仅仅当做一个单向的推送通道
仅当mvc框架需要向浏览器主动推送数据时才在mvc框架中调用Gateway的APIGatewayClient完成推送
2、基本步骤
1、网站页面建立与GatewayWorker的websocket连接
2、GatewayWorker发现有页面发起连接时,将对应连接的client_id发给网站页面
3、网站页面收到client_id后触发一个ajax请求(假设是bind.php)将client_id发到mvc后端
4、mvc后端bind.php收到client_id后利用GatewayClient调用Gateway::bindUid($client_id, $uid)将client_id与当前uid(用户id或者客户端唯一标识)绑定。如果有群组、群发功能,也可以利用Gateway::joinGroup($client_id, $group_id)将client_id加入到对应分组(重点 有了这个以后后面才能发消息之类的)
5、页面发起的所有请求都直接post/get到mvc框架统一处理,包括发送消息(发消息自己自定义格式)
6、mvc框架处理业务过程中需要向某个uid或者某个群组发送数据时,直接调用GatewayClient的接口Gateway::sendToUid Gateway::sendToGroup 等发送即可

三、搭建gateway
1、下载gateway
http://www.workerman.net/download
2、配置events文件
在页面发起连接时候,将对应连接的clent_id发给网站页面。我们在此文件加上函数

技术分享

四、服务端的配置

1、绑定client_id 并加入分组
技术分享
在此方法中我们一定要把收到的client_id加入分组中,这里简单点前台页面直接设置room_id为1。
2、收发消息
技术分享

技术分享
之后我们就可以在这个方法里面 进行我们的一些业务逻辑 接入我们的项目

3、前端页面稍微修改下
技术分享

技术分享

使用Gateway-Worker实现多人分组实时聊天 结合第三方tp

标签:ndt   img   格式   ajax   系统   定义   mysq   发送   api   

原文地址:http://www.cnblogs.com/jjffeng-/p/7510989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!