Ratchet WAMP$主题错误:对非对象调用成员函数broadcast()

Ratchet WAMP$主题错误:对非对象调用成员函数broadcast(),wamp,publish-subscribe,ratchet,Wamp,Publish Subscribe,Ratchet,标题说明了一切。以下是我的代码: (Shell script) $loop = React\EventLoop\Factory::create(); $pusher = new MyApp\Chat; //Receiving IPC messages: $socket = new React\Socket\Server($loop); $socket->on('connection', function ($conn) { $pusher = new MyApp\Chat;

标题说明了一切。以下是我的代码:

(Shell script)
$loop   = React\EventLoop\Factory::create();
$pusher = new MyApp\Chat;

//Receiving IPC messages:
$socket = new React\Socket\Server($loop);
$socket->on('connection', function ($conn) {
    $pusher = new MyApp\Chat;
    echo date('H:i:s'). "!!IPC Connection opened!!\n";

    $conn->on('data', array($pusher, 'onUpdate'));
});

$socket->listen(1337, '127.0.0.1'); //Binding to our IP so remotes can't connect.

echo "%%% IPC listener started succesfully. %%%\n%%%\n";

// WebSocket server:
//here the code is identical to that on the Ratchet 'push-server' tutorial
…和“onUpdate”功能

public function onUpdate($entry)
{
    echo(date('H:i:s'). ": !<<---IPC Data Received.DATA:::". $entry. ":::--->>!\n");
    $topic = 'Prime_mover';
    $topic->broadcast($entry);
}
公共函数更新($entry)
{
回音(日期('H:i:s')。“:!!\n”);
$topic=‘原动机’;
$topic->broadcast($entry);
}
…使用“onPublish”功能:

public function onPublish(Conn $conn, $topic, $event, array $exclude, array $eligible )
{
    echo $topic. "\n";
    //echo implode(array_keys($topic)). "\n";
    $channel = $topic->getId();

    if($topic->broadcast($event))
    {
        echo(date('H:i:s') . ": ***A client has published ###" . 
            implode('',      $event) . "### to (((". $channel. ")))***\n");
    } else {
        echo(date('H:i:s'). ": !!<--An error occured during publish-->!!\n");
    }
}
发布时的公共函数(Conn$Conn,$topic,$event,数组$exclude,数组$qualified) { echo$topic。“\n”; //回声内爆(数组_键($topic))。“\n”; $channel=$topic->getId(); 如果($topic->broadcast($event)) { echo(date('H:i:s')。“:***客户已发布###”。 内爆(“”,$event)。“###到(((“$channel”))***\n”); }否则{ 回音(日期('H:i:s')。“:!!\n”); } } 客户端代码很简单

我确信这个bug,如果有的话(我已经在这里呆了大约10个小时),并不存在

我通过控制台确认浏览器确实订阅了“原动机”。这也会显示在CLI上。此外,我还通过“onPublish”功能设置了一个发布到该频道的按钮。这很有效

如上所述,我没有使用ZeroiMQ进行IPC,因为我是在windows机器上,在PHP5上开发的。好的,PHP5不存在可用的ZeroMQ绑定

我求助于使用裸露的插座。它们的工作方式同样出色,我可以在CLI上看到消息确实到达了这个特定的脚本

“onUpdate”函数确实会通过CLI再次被调用、确认

我以前尝试过使用URL“http:\example.com\primary\u-mover”,但没有成功,出于绝望,我尝试了字符串“primary\u-mover”。你现在可能在摇头——我知道,那样不行

我也尝试过使用$topica作为数组,但不起作用。我想这里最重要的问题是,$topic是什么类型的对象,为什么一个简单的字符串在它的位置不起作用?我在这里遗漏了什么吗?它是如何正确“构造”的

 $topic = 'Prime_mover';
 $topic->broadcast($entry);

$topic是一个字符串!而且它没有任何方法。

谢谢你的回答,沙伦。我知道这看起来有多可笑,但是如果你看看ratchet push集成教程,除非我弄错了(我怀疑是这样),否则同样的事情也会发生,就像这样:$topic=$this->subscribedTopics[$entryData['cat']$主题->广播()$主题的赋值为“kittensCategory”。由于没有正确格式化代码,我现在在手机上。如果你能帮我解决这个问题,我将不胜感激。没问题。但我认为这个话题没有意义,我也对此感到困惑$主题是一个字符串它是如何获得广播方法的????