【问题标题】:Ratchet client message棘轮客户端消息
【发布时间】:2014-11-24 21:06:07
【问题描述】:

我已经使用 Ratchet 集成了推送器。向所有用户广播工作正常。

现在我正在尝试找到一种方法,当我获得连接时如何向特定用户发送消息。

在订阅时执行的方法:

public function onSubscribe(ConnectionInterface $conn, $topic) {
    $conn->send(json_encode("Hello"));
}

客户端的JS:

var conn = new ab.Session('ws://127.0.0.1:8080',
                function() {
                    conn.subscribe('chat', function(topic, data) {
                        console.log(data); // here I'd like to get that "Hello" message
                    });
                },
                function() {
                    console.warn('WebSocket connection closed');
                },
                {'skipSubprotocolCheck': true}
        );

我没有收到任何消息,我想我没有正确格式化它(json_encode(“Hello”))。有什么帮助吗?

【问题讨论】:

    标签: javascript php websocket ratchet


    【解决方案1】:

    您需要以某种方式存储连接,然后直接调用它们。

    例如:

    $conns[$conn->resourceId] = $conn;
    

    然后:

    $conns[$resourceId]->write("new data");
    

    至于为什么订阅时收不到消息,试试 write() 方法而不是 send() 方法。

    此外,请检查控制台以查看您是否正在接收数据但未正确解包。

    【讨论】:

    • 调用未定义的方法 Ratchet\Wamp\WampConnection::write() 我收到了消息,因为当我在没有 json_encode 的情况下发送它时,我收到一个错误 JSON.parse 错误。但是当我用 json_encode 发送它时,我什么也得不到
    • 哦,我忘了 Ratchet 扩展了 React 连接。嗯,给我一点,我会调查一下。我非常熟悉 React,但不熟悉 Ratchet。 (仅供参考:Ratchet 是基于 React 构建的。)