这篇文章主要介绍了关于gatewayworker与thinkphp等框架结合的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
使用gatewayworker时开发者最关心的是如何与现有mvc框架(thinkphp yii laravel等)整合,以下是官方推荐的整合方式。
见示意图:
## 总体原则现有mvc框架项目与gatewayworker独立部署互不干扰
所有的业务逻辑都由网站页面post/get到mvc框架中完成
gatewayworker不接受客户端发来的数据,即gatewayworker不处理任何业务逻辑,gatewayworker仅仅当做一个单向的推送通道
仅当mvc框架需要向浏览器主动推送数据时才在mvc框架中调用gateway的api(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片段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直接双向通讯的方式完成业务通讯。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注!
相关推荐:
yii1.1框架关于日志配置的使用
用laravel dingo api插件库创建api的方法
以上就是gatewayworker与thinkphp等框架结合的介绍的详细内容。