workerman 中转转发程序 需求2 动态改变链接的服务器地址

上一篇文章写过workerman作为转发程序的代码和思路,需求2:想通过http接口动态改变转发程序所连接的服务器地址

 

思路:

第一步,通过workermanlisten 接口 创建一个 监听程序,监听一个http 接口对外开放,这就打开了接口这一环节

第二步,通过这个接口拿到改变的服务端IP连接IP地址改变动态链接

第三步,改变动态连接,我使用了在接口接过来的时候重新初始化连接程序,销毁上一个,初始化下一个连接地址

代码:

必须是PHP7 版本以上的,不然监听程序会报错

// 这里主要是针对 onWorkerStart 做出的处理
$worker->onWorkerStart = function ($worker) {
    global $connection_to_server;
// 开启一个内部端口,方便内部系统推送数据,http协议格式 文本+换行符
    $inner_worker = new Worker('http://0.0.0.0:2016');
// 设置端口复用,可以创建监听相同端口的Worker(需要PHP>=7.0)
    $inner_worker->reusePort = true;
// 跨域处理
    $inner_worker->onWorkerStart = function ($connection) {
        $connection->headers = [
            'Access-Control-Allow-Origin: *',
            'Access-Control-Allow-Methods:POST',
            'Access-Control-Allow-Headers:x-requested-with,content-type'
        ];
    };
// 对外接口收到消息
    $inner_worker->onMessage = function ($connection, $buffer) {
        global $connection_to_server;
        global $serverUrl;
        global $events_funtion;
// 跨域
        \Workerman\Protocols\Http::header('Access-Control-Allow-Origin: *');
// 回复对外接口页面
        $connection->send('true');
// 得到双方通讯唯一对象 方便中转程序发送消息
        global $connection1, $connection2;
        if (!empty($_REQUEST['setIp'])) {
            if ($connection_to_server != null) {
                $connection_to_server->close();
            }
            $serverUrl = 'tcp://' . $_REQUEST['setIp'];
            // 链接真实服务器
            $connection_to_server = new AsyncTcpConnection($serverUrl);

            // 接到真实服务器响应信息,返回给客户端
            $connection_to_server->onMessage = function ($connection_to_server, $buffer) use ($connection) {
                global $connection1;
                global $connection2;
               
             // 写你自己的业务逻辑
                
            };
            $connection_to_server->connect();

        }


    };
    // 执行监听。正常监听不会报错
    $inner_worker->listen();
};

 以上就是workerman关于转发程序动态地址的代码,不懂得请联系我邮箱或者QQ 1263078673@qq.com 1263078673

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值