getewayworker与框架结合,使用ajax请求,服务刚起时ajax容易请求失败,直接用 send 却很稳定为什么?如果采用 send 到 Events.php 类,该如何引入框架类

延津
2570 2 0
2个回答

phpcreeper

1.第一个问题感觉描述挺模糊的,什么场景啊?你说的谁的send ? ajax请求失败?具体报告了什么错误码和错误信息? ajax请求失败和send又有什么关系呢? ......。 总体原则上看,只能说GatewayWorker是基于网络事件库的异步非塞IO模型,所以非常稳定。
2.如果想采用 send 到 Events.php 类, 分两步,参考做法大致如下:
(1) 参考 start_gateway.php 新启一个 start_gateway2.php,即新开一个内部推送端口,参考代码:

// gateway 进程,这里使用Text协议
$gateway = new Gateway("text://192.168.1.100:9999");

// gateway名称,status方便查看
$gateway->name = 'textGateway';

// gateway进程数
$gateway->count = 1;

// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';

// 内部推送端口,
$gateway->startPort = 3900;

// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';

// 如果不是在根目录启动,则运行runAll方法
!defined('GLOBAL_START') && Worker::runAll();

(2)利用 AsyncTcpConnection 建立异步连接,直接send 即可,Event.php中的onMessage方法会接收到send来的数据,参考代码:

$worker = new Worker();
$worker->onWorkerStart = function ($worker){
        $connection = new AsyncTcpConnection('text://192.168.1.100:9999');

        $connection->onClose = function($connection) {
            echo "will reconnect after 2 seconds" . PHP_EOL;
            $connection->reconnect(2);
        };  

        //推送自己的业务数据
        $connection->send("some data....");
        $connection->connect();     
};

// 运行所有服务
!defined('GLOBAL_START') && Worker::runAll();
  • 延津 2018-10-25

    send 和ajax 的问题:运行GatewayWorker服务,立即开启html页面,当 tcp 握手完成时发起ajax,采用ajax请求会失败,服务器 500 错误,当服务器运行一段时间后再开页面就是没有问题的;同样的情况在页面使用 send 发送数据到 Event.php 的话可以正常运行不用等待
    主要问题:由于框架启动引入文件和 GatewayWorker 服务启动引入文件不同,是不是会造成初始化的类不同,导致GatewayWorker不能使用框架类,怎么在GatewayWorker服务启动同时引入框架类

  • 延津 2018-10-26

    怎么在GatewayWorker使用框架类呢

延津

send 和ajax 的问题:运行GatewayWorker服务,立即开启html页面,当 tcp 握手完成时发起ajax,采用ajax请求会失败,服务器 500 错误,当服务器运行一段时间后再开页面就是没有问题的;同样的情况在页面使用 send 发送数据到 Event.php 的话可以正常运行不用等待
主要问题:由于框架启动引入文件和 GatewayWorker 服务启动引入文件不同,是不是会造成初始化的类不同,导致GatewayWorker不能使用框架类,怎么在GatewayWorker服务启动同时引入框架类

  • phpcreeper 2018-10-25

    1、ajax 返回500服务器错误,只要gatewaywoker服务启动OK,那这个和gatewaywoker服务没有什么直接关系,自己排查下吧,catch下错误回调,一般多是通信数据格式有问题所致。
    2、不同的框架整合关乎细节并依赖应用场景,需要自己酌情处理【你可以学学thinkphp怎么整合的】,否则建议将第三方框架和gatewayworker框架分开独立部署,然后就可以在框架之间灵活业务处理,具体方案官方都有样板: http://workerman.net/gatewaydoc/advanced/push.html

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