tp5整合GatewayWorker

作者Battle 文章分类 分类:PHP 文章评论 0条评论 阅读次数 已被围观 6123

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);
    }
}

分类:PHP

发表评论: