May
18
2018
tp5整合GatewayWorker
1:安装最新的tp5
2:在tp5所在目录,cmd命令输入composer require workerman/gateway-worker-for-win 下载
3:前往workerman官网下载GatewayWorker demo 取出Applications/Yourapp中的文件全部复制到thinkphp5目录application里面的任意文件夹,这里取名为push。
4:将解压后的文件夹中的start_for_win.bat复制到tp5的根目录,即与application同级的目录。
5:右键start_for_win.bat,点编辑,将里面的目录改成自己的目录,这里改为
php application\push\start_register.php application\push\start_gateway.php application\push\start_businessworker.php
Pause
6:修改push里面的start_gateway.php 文件 将$gateway = new Gateway("tcp://0.0.0.0:8282");修改为$gateway = new Gateway("websocket://0.0.0.0:8282"); 备注:这里很重要,不修改协议,将无法成功握手
接下去就是简单实用了
<script type="text/javascript"> /** * 与GatewayWorker建立websocket连接,域名和端口改为你实际的域名端口, * 其中端口为Gateway端口,即start_gateway.php指定的端口。 * start_gateway.php 中需要指定websocket协议,像这样 * $gateway = new Gateway(websocket://0.0.0.0:7272); */ ws = new WebSocket("ws://127.0.0.1:8282"); // 服务端主动推送消息时会触发这里的onmessage ws.onmessage = function(e){ // json数据转换成js对象 var bindUrl = "{:url('push/BindClientId')}"; var data = e.data; var type = data.type || ''; switch(type){ // Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定 case 'init': // 利用jquery发起ajax请求,将client_id发给后端进行uid绑定 $.post(bindUrl, {client_id: data.client_id}, function(data){ }, 'json'); break; // 当mvc框架调用GatewayClient发消息时直接alert出来 default : var text = e.data; var str = '<li style="width:100%; height:60px; border:1px solid #000">' +text +'</li>'; $('#message_box').append(); // alert(e.data); } }; </script>
php:
<?php namespace app\index\controller; use \GatewayWorker\Lib\Gateway; class Push{ public function helloAction () { $uid = $_GET['uid']; session('uid', $uid); $view = new View; return $view->fetch(); } public function BindClientIdAction () { $client_id = $_POST['client_id']; // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值 Gateway::$registerAddress = '127.0.0.1:1238'; $bindUid = session('uid'); // 假设用户已经登录,用户uid和群组id在session中 // client_id与uid绑定 Gateway::bindUid($client_id, $bindUid); // 加入某个群组(可调用多次加入多个群组) // Gateway::joinGroup($client_id, $group_id); } public function AjaxSendMessageAction () { $message = '你下的订单有误'; // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值 Gateway::$registerAddress = '127.0.0.1:1238'; GateWay::sendToAll($message); } }
发表评论: