请问关于GatewayWorker与我现有项目通信结构是否正确

蛋挞树

项目A:GatewayWorker
项目B:home

项目A与项目B同级目录

项目需求:A负责接收硬件反馈回来的信息(TCP协议),并存储数据库,B负责提交请求给硬件,通过websocket提交到Even.php 然后Even.php 处理后 提交到硬件(TCP);

项目B是TP框架的一个项目

现在是这样:
在项目A中 start_gateway.php 定义TCP协议:

// 自动加载类
require_once __DIR__ . '/../../Workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);

// gateway 进程
$gateway = new Gateway("tcp://0.0.0.0:7659");
// gateway名称,status方便查看
$gateway->name = 'YourAppGateway';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';

在项目A中新建start_websocket.php 负责接收http

require_once __DIR__ . '/../../Workerman/Autoloader.php';

Autoloader::setRootPath(__DIR__);
// WebServer

$web = new WebServer("http://0.0.0.0:55150");
// WebServer数量
$web->count = 2;
// 设置服务注册地址
$web->registerAddress = '127.0.0.1:1238';
// 设置站点根目录
$web->addRoot('www.your_domain.com', __DIR__.'/../../../home/');

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

在项目B中 index.html中JS如下:

<script type="text/javascript">
        $(function(){
            connect();
        });
        // 连接服务端
        function connect() {
           // 创建websocket
           ws = new WebSocket("ws://"+document.domain+":55150");
           // 当socket连接打开时,输入用户名           
        }
    </script>

可是现在运行程序后会出现错误:WORKER EXIT UNEXPECTED

这个是什么原因?

3017 1 1
1个回答

walkor

tp项目直接用nginx php-fpm跑,没必要用workerman跑,这样start_websocket.php可以去掉了。

WORKER EXIT UNEXPECTED 应该是tp框架内部调用了exit die导致的。

  • 蛋挞树 2016-04-19

    那您的意思是如果抛除掉tp的问题 我这么写是没有问题的 是么?

  • walkor 2016-04-19

    大概看了下,没问题

  • 蛋挞树 2016-04-19

    @1:哦 好的。如果TP不可以 就换其他的了 非常感谢这么晚帮我解决问题

  • walkor 2016-04-19

    不客气

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