龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > PHP > thinkphp5集成workerman-gatewayworker

thinkphp5集成workerman-gatewayworker

龙行    PHP    2019-8-12    292    1评论    本文已被百度收录点击查看详情

tp5根目录安装

composer require workerman/gateway-worker

public入口文件添加server.php

<?php
/**
 * Created by LongX.
 * DateTime: 2019/08/12 17:41 
 * Function:CLI模式下运行
 */
define('APP_PATH', __DIR__ . '/../application/');
define('RUNTIME_PATH', __DIR__ . '/../runtime/');
define('BIND_MODULE','push/start');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

创建push模块新建两个控制器Start.php Events.php

Start.php

<?php
/**
 * Created by LongX.
 * Date: 2019/08/12 17:43
 * Function:
 */
namespace app\push\controller;

use \GatewayWorker\Register;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Worker;

class Start extends Worker {

    public function __construct(){
        //初始化register
        new Register('text://0.0.0.0:1238');
        //初始化 bussinessWorker 进程
        $worker = new BusinessWorker();
        $worker->name = 'haha';
        $worker->count = 1;
        $worker->registerAddress = '127.0.0.1:1238';
        //设置处理业务的类,此处制定Events的命名空间
        $worker->eventHandler = '\app\push\controller\Events';
        // 初始化 gateway 进程
        $gateway = new Gateway("websocket://0.0.0.0:39111");
        $gateway->name = 'push';
        $gateway->count = 1;
        $gateway->lanIp = '127.0.0.1';
        $gateway->startPort = 2900;
        $gateway->pingInterval = 10;
        $gateway->pingData = '{"type":"ping"}';
        $gateway->registerAddress = '127.0.0.1:1238';
        //运行所有Worker;
        Worker::runAll();
    }

}

Events.php

<?php
/**
 * Created by LongX.
 * Date: 2019/08/12 17:44
 * Function:事件处理类
 */
namespace app\push\controller;
use GatewayWorker\Lib\Gateway;
class Events {
    /**
     * 当客户端发来消息时触发
     * @param int $client_id 连接id
     * @param mixed $data 具体消息
     */
    public static function onMessage($client_id, $data){
        Gateway::sendToClient($client_id,json_encode($data));
    }
    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     *
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {
        var_dump($client_id);
        Gateway::sendToClient($client_id,json_encode(['status'=>"success",'msg'=>"连接成功"]));
    }
    /**
     * 当连接断开时触发的回调函数
     * @param $connection
     */
    public static function onClose($client_id){
        Gateway::sendToClient($client_id,json_encode(['status'=>"error",'msg'=>"断开连接"]));
    }
    /**
     * 当客户端的连接上发生错误时触发
     * @param $connection
     * @param $code
     * @param $msg
     */
    public static function onError($client_id, $code, $msg){
        echo "error $code $msg\n";
    }
    /**
     * 每个进程启动
     * @param $worker
     */
    public static function onWorkerStart($worker){
    }
}

然后是index.html 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>

<script>
    ws = new WebSocket("ws:0.0.0.0:39111");    //填你线上服务端地址
    // 服务端主动推送消息时会触发这里的onmessage
    ws.onopen = function(){
        console.info("与服务端连接成功");
        ws.send('test msg\n');//相当于发送一个初始化信息
        console.info("向服务端发送心跳包字符串");
    };

    ws.onmessage = function(e){
        // json数据转换成js对象
        var data = eval("("+e.data+")");
        console.log(data.msg);
    };

    ws.onclose = function(e){
        console.log(e);
    };

</script>

</body>
</html>


评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/276.html
  • 上篇文章:mysql远程连接报1130错误
  • 下篇文章:php递归获取所有上级
  • tp5 workerman
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
VPS234
VPS2342019-08-28 14:19回复
#1
发现用thinkphp的用户挺多的啊
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部