window版本onMessage is not callable

surechina

项目写在Linux版本下,按照教程转到window下运行、gatewayWorker,发下onMessage接受不了信息,用webSocket能够连上,也能接受gateway的心跳信息,就是gateway端不能接受web的信息,

php start_register.php start_gateway.php start_businessworker.php start_tcp.php 启动后提示

----------------------- WORKERMAN -----------------------------
Workerman version:3.2.5          PHP version:5.4.16
------------------------ WORKERS -------------------------------
worker                 listen                    processes status
Register               text://0.0.0.0:1238        1        
WebsocketGateway       Websocket://0.0.0.0:1129   1        
YourAppBusinessWorker  none                       1        
TcpGateway             tcp://0.0.0.0:8282         1        
----------------------------------------------------------------
Press Ctrl-C to quit. Start success.
Waring: Event::onMessage is not callable
7636 3 1
3个回答

walkor

这个是因为workerman版本和GatewayWorker版本不一致导致的。
把GatewayWorker和Workerman(win)都更新到最新就好了

  • 暂无评论
wodetian55

很遗憾的告诉楼主,其实作者的回复是错的。。。。
正确的修改方式:
找到yourProj下的start_businessworker.php
然后

<?php 
/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
use \Workerman\Worker;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;

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

// bussinessWorker 进程
$worker = new BusinessWorker();
// worker名称
$worker->name = 'DemoBusinessWorker';
// bussinessWorker进程数量
$worker->count = 4;
// 服务注册地址
$worker->registerAddress = '127.0.0.1:2688';
// 需要将eventHandler的默认值Events修改成Event就可以了
$worker->eventHandler = 'Event';

// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}
  • walkor 2019-06-09

    设置$worker->eventHandler = 'Event'; 是错误做法,因为会和Event扩展冲突,会导致Events::onMessage is not callable。

zasray

哈哈 我是来看二楼的

  • walkor 2019-06-09

    题主的问题是由于题主的linux环境和windows环境版本不一致导致。这个问题恰逢gatewayWorker的2.0.4版本中将Event.php改成了Events.php,如果两个环境不一致会导致报Event::onMessage is not callable。所以让其全部更新到最新版本问题解决。不过此贴是2016年的很老的帖子,已经不适用于目前情况。

  • zasray 2019-06-10

    嗯嗯 理解的

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