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


    一、基础知识
    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发给网站页面。我们在此文件加上函数

    2ERF~_MCP$1KUH@_JEJE9[F

    四、服务端的配置

    1、绑定client_id 并加入分组
    YERH0ISPX57)X`MA(PV~D4J
    在此方法中我们一定要把收到的client_id加入分组中,这里简单点前台页面直接设置room_id为1。
    2、收发消息
    GVQES(JJ_)W}9)6ZG0@{LGG

    )9FTQYB{~OVX3)VOFIM(A56
    之后我们就可以在这个方法里面 进行我们的一些业务逻辑 接入我们的项目

    3、前端页面稍微修改下
    [8$QAE1M~SV0YGEBQBRPQ{G

    ]X)7I)Q]K5I1~222N86U40M

  • 相关阅读:
    condition精准控制
    Juc(上)
    算法和空间复杂度分析
    ReentrantLock
    死锁
    互斥锁
    线程常用方法
    多线程售票与同步机制
    线程的7种状态
    selenium 自动刷司法课
  • 原文地址:https://www.cnblogs.com/jjffeng-/p/7510989.html
Copyright © 2020-2023  润新知