棘轮WAMP $主题错误:在非对象上调用成员函数broadcast()

时间:2014-02-16 13:11:17

标签: 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;
    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);
}

......“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");
    }
}

客户端代码很简单。

我确定这个错误,如果有的话(我已经在这里工作了大约10个小时),并不存在。

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

从上面可以看出,我没有使用ZeroiMQ for IPC,因为我正在开发一台Windows机器,在PHP 5上.AFAIK,PHP5没有工作的ZeroMQ绑定。

我使用裸插座。它们的工作效果非常好,我可以在CLI上看到消息确实可以到达这个特定的脚本。

通过CLI再次调用“onUpdate”函数。

我之前尝试使用URL“http:\ example.com \ Prime_mover”,当它无法正常工作时,出于绝望,我尝试了字符串“Prime_mover”。你现在可能正在摇头 - 我知道,这样做不会那样。

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

1 个答案:

答案 0 :(得分:1)

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

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