首页 » 网站推广 » gatewayclientphp技巧_GatewayWorker实现消息推送

gatewayclientphp技巧_GatewayWorker实现消息推送

访客 2024-11-21 0

扫一扫用手机浏览

文章目录 [+]

总体原则:

现有mvc框架项目与GatewayWorker独立支配互不滋扰

所有的业务逻辑都由网站页面post/get到mvc框架中完成

gatewayclientphp技巧_GatewayWorker实现消息推送

GatewayWorker不接管客户端发来的数据,即GatewayWorker不处理任何业务逻辑,GatewayWorker仅仅当做一个单向的推送通道

gatewayclientphp技巧_GatewayWorker实现消息推送
(图片来自网络侵删)

仅当mvc框架须要向浏览器主动推送数据时才在mvc框架中调用Gateway的API GatewayClient完成推送。

GatewayClient安装

参考地址 https://github.com/walkor/GatewayClient

详细实现步骤

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 等发送即可

示例代码

GatewayWorker中Events.php代码(只有个onConnect回调设置)

<?phpuse \GatewayWorker\Lib\Gateway;class Events{ // 当有客户端连接时,将client_id返回,让mvc框架判断当前uid并实行绑定 public static function onConnect($client_id) { Gateway::sendToClient($client_id, json_encode(array( 'type' => 'init', 'client_id' => $client_id ))); } // GatewayWorker建议不做任何业务逻辑,onMessage留空即可 public static function onMessage($client_id, $message) { }}

网站页面js片段

/ 与GatewayWorker建立websocket连接,域名和端口改为你实际的域名端口, 个中端口为Gateway端口,即start_gateway.php指定的端口。
start_gateway.php 中须要指定websocket协议,像这样 $gateway = new Gateway(websocket://0.0.0.0:7272); /ws = new WebSocket("ws://your_domain.com:7272");// 做事端主动推送时会触发这里的onmessagews.onmessage = function(e){ // json数据转换成js工具 var data = eval("("+e.data+")"); var type = data.type || ''; switch(type){ // Events.php中返回的init类型的,将client_id发给后台进行uid绑定 case 'init': // 利用jquery发起ajax要求,将client_id发给后端进行uid绑定 $.post('./bind.php', {client_id: data.client_id}, function(data){}, 'json'); break; // 当mvc框架调用GatewayClient发时直接alert出来 default : alert(e.data); }};

mvc后端uid绑定代码片段bind.php (利用GatewayClient绑定)

<?php//加载GatewayClient。
关于GatewayClient拜会本页面底部先容require_once '/your/path/GatewayClient/Gateway.php';// GatewayClient 3.0.0版本开始要利用命名空间use GatewayClient\Gateway;// 设置GatewayWorker做事的Register做事ip和端口,请根据实际情形改成实际值(ip不能是0.0.0.0)Gateway::$registerAddress = '127.0.0.1:1236';// 假设用户已经登录,用户uid和群组id在session中$uid = $_SESSION['uid'];$group_id = $_SESSION['group'];// client_id与uid绑定Gateway::bindUid($client_id, $uid);// 加入某个群组(可调用多次加入多个群组)Gateway::joinGroup($client_id, $group_id);

mvc后端发代码片段send_message.php (利用GatewayClient发送)

<?php//加载GatewayClient。
关于GatewayClient拜会本页面底部先容require_once '/your/path/GatewayClient/Gateway.php';// GatewayClient 3.0.0版本开始要利用命名空间use GatewayClient\Gateway;// 设置GatewayWorker做事的Register做事ip和端口,请根据实际情形改成实际值(ip不能是0.0.0.0)Gateway::$registerAddress = '127.0.0.1:1236';// 向任意uid的网站页面发送数据Gateway::sendToUid($uid, $message);// 向任意群组的网站页面发送数据Gateway::sendToGroup($group, $message);
把稳

以上仅是mvc框架与GatewayWorker官方推举的结合办法,并不是逼迫利用此办法,开拓者可以自由变革选择结合办法以适应自己的业务需求。
当然也可以采取客户端与GatewayWorker直接双向通讯的办法完成业务通讯。

关于GatewayClient

源码:

https://github.com/walkor/GatewayClient

把稳:

如果GatewayClient和GatewayWorker不是在同一台做事器上,则须要先将start_gateway.php中的lanIp改成当前做事器的内网ip(如果不在一个内网可改成公网ip)。

如果GatewayClient和GatewayWorker在同一台做事器上运行,则不用做任何变动,直接按照示例利用GatewayClient即可。

通过GatewayClient发送的数据不会经由Event.php,而是直接经由Gateway进程转发给客户端。

GatewayClient无法吸收客户端发来的数据。

客户端利用示例

require_once '/your/path/GatewayClient/Gateway.php';/ gatewayClient 3.0.0及以上版本加了命名空间 而3.0.0以下版本不须要use GatewayClient\Gateway; /use GatewayClient\Gateway;/ ====这个步骤是必须的==== 这里填写Register做事的ip和Register端口,把稳端口不是gateway端口 ip不能是0.0.0.0,端口在start_register.php中可以找到 这里假设GatewayClient和Register做事都在一台做事器上,ip填写127.0.0.1。
如果不在一台做事器则填写真实的Register做事的内网ip(或者外网ip) /Gateway::$registerAddress = '127.0.0.1:1236';// 以下是调用示例,接口与GatewayWorker环境的接口同等// 接口详细利用方法见《Lib\Gateway类供应的接口》一章// 把稳除了不支持sendToCurrentClient和closeCurrentClient方法// 其它方法都支持Gateway::sendToAll($data);Gateway::sendToClient($client_id, $data);Gateway::closeClient($client_id);Gateway::isOnline($client_id);Gateway::bindUid($client_id, $uid);Gateway::isUidOnline($uid);Gateway::getClientIdByUid($uid);Gateway::unbindUid($client_id, $uid);Gateway::sendToUid($uid, $data);Gateway::joinGroup($client_id, $group);Gateway::sendToGroup($group, $data);Gateway::leaveGroup($client_id, $group);Gateway::getClientCountByGroup($group);Gateway::getClientSessionsByGroup($group);Gateway::getAllClientCount();Gateway::getAllClientSessions();Gateway::setSession($client_id, $session);Gateway::updateSession($client_id, $session);Gateway::getSession($client_id);...

相关文章

智能设备使用协议,守护您的隐私与权益

在信息时代,智能设备的普及使得我们的生活变得更加便捷。随之而来的是对个人隐私和权益的潜在威胁。为了确保用户在使用智能设备时的合法权...

网站推广 2024-12-25 阅读0 评论0

IT经典段子,介绍科技圈的幽默与智慧

在科技飞速发展的今天,IT行业成为了众多年轻人向往的职业。在这个充满挑战与机遇的行业中,幽默和智慧同样不可或缺。下面,就让我们一起...

网站推广 2024-12-25 阅读0 评论0

IT绘画教程,介绍数字艺术的魅力之门

随着科技的飞速发展,数字艺术逐渐成为人们生活中不可或缺的一部分。在这股潮流中,IT绘画教程应运而生,为广大绘画爱好者提供了学习数字...

网站推广 2024-12-25 阅读0 评论0

IT编程原理探析,架构之美与算法之魂

在数字化时代,IT编程已经成为推动社会发展的重要力量。从互联网、人工智能、大数据到云计算,编程技术无处不在。究竟什么是IT编程原理...

网站推广 2024-12-25 阅读0 评论0