使用gatewayworker,gatewayworker是基于workerman开发的,workerman有的gatewayworker都有,并且支持分布式部署,框架代码在构造方法内调用Gateway::$register设置register服务的注册ip和端口,在逻辑代码里面直接通过Gateway::sendToAll()或者Gateway::sendToClientId等,就可以实现框架与Gateway服务的整合,具体的操作时间可以通过前端传入到http服务,然后通过http调Gateway接口,手册上讲解的很详细 <?php use \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) { } } /** * 与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"); // 服务端主动推送消息时会触发这里的onmessage ws.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); } }; // 此处可以是laravel等PHP框架 <?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);
使用gatewayworker,gatewayworker是基于workerman开发的,workerman有的gatewayworker都有,并且支持分布式部署,框架代码在构造方法内调用Gateway::$register设置register服务的注册ip和端口,在逻辑代码里面直接通过Gateway::sendToAll()或者Gateway::sendToClientId等,就可以实现框架与Gateway服务的整合,具体的操作时间可以通过前端传入到http服务,然后通过http调Gateway接口,手册上讲解的很详细