我在使用gatewayWorkman 现在有个需求 就是 业务处理完成后要将数据发送到另一台服务器

567

我在使用gatewayWorkman 现在有个需求 就是 业务处理完成后要将数据发送到另一台服务器 我该怎么处理?

我想咨询下 业务处理完成后能不能通过网关 建立多个tcp将数据发送到指定的服务器 并接收返回信息

不知道怎么实现怎么写

517 2 1
2个回答

admin
  • 567 2023-02-09

    你好 我想问下 在gatewayworkman 的业务服务器中使用AsyncTcpConnect 消息是 直接在业务服务器转发 还是在网关转发

  • admin 2023-02-09

    请详细说明 应用场景,用A、B、C来详细说明场景

  • 567 2023-02-09

    A数据采集设备 B企业平台 C国家平台 要求 B企业采集的设备数据 要实时转发到C国家平台 国家平台提交资料的时候有ip限制 比如1个 因为采集设备信息较多 B企业平台中的业务服务器较多 处理完成业务后直接转发到C国家平台 因为ip限制的原因可能就不合适了 转发到C国家平台后 还需要接收C国家平台返回的确定信息 并更改B企业平台中的数据库 更改发送和接收标识

admin
<?php
require  __DIR__ .'/vendor/autoload.php';

$workerman=new \Workerman\Worker();
$workerman->name='采集器B企业';
$workerman->onWorkerStart=function (){
    //这里写curl代码,并且缓存到redis或者mysql
};

$pushGovPlatform=new \Workerman\Worker();
$pushGovPlatform->name='推送到GOV';
$workerman->onWorkerStart=function (){
    //从redis读取任务队列

    //curl 提交给国家平台

    //结果返回,修改数据库
};

\Workerman\Worker::runAll();

如果需要更进一步的疑问,请在此详细说明

  • 567 2023-02-09

    你好 我使用的是 gatewayWorkman 推送到GOV的代码 应该写在网关服务器是吗?
    $workerman->onWorkerStart=function (){
    //从redis读取任务队列 是不是写错了
    应该 $pushGovPlatform->onWorkerStart=function (){
    //从redis读取任务队列
    这里细节上还有部分细节问题
    1 一种设备类型要建立一个tcp 就是说要多个tcp
    2 就是有可能实时添加一个新的类型 或者删除禁用一个类型 对应的tcp要关闭

    $pushGovPlatform=new \Workerman\Worker();
    $pushGovPlatform->name='推送到GOV';
    $asyncTcps=[];
    $pushGovPlatform->onWorkerStart=function (){
    $list =[1,2,3]; //设备类型
    $address='tcp://www.baidu.com:80';
    global $asyncTcps;
    foreach ($list as $key){
    $connect=new AsyncTcpConnection($address);
    $connect->id=$key;
    $connect->onConnect=function (AsyncTcpConnection $con){
    Monitor::onContent($con);
    };
    $connect->onMessage=function (AsyncTcpConnection $con){
    Monitor::onMessage($con);
    };
    $connect->onClose=function (AsyncTcpConnection $con){
    Monitor::onClose($con);
    };
    $connect->onError=function (AsyncTcpConnection $con){
    Monitor::onError($con);
    };
    $connect->connect();
    $asyncTcps[$key]=$connect;
    }
    //从redis读取任务队列
    //判断设备类型 选用正确的tcp连接
    //curl 提交给国家平台
    //结果返回,修改数据库()

    };
    动态 添加和删除的时候直接处理 asyncTcps 对不对

年代过于久远,无法发表回答
🔝