【问题标题】:Php ratchet websocket $conn->send($msg)! How to get this messenge in client?PHP 棘轮 websocket $conn->send($msg)!如何在客户端获取此消息?
【发布时间】:2023-03-30 05:28:01
【问题描述】:

这是我的代码(使用 rachet 和 wamp 服务器的 websocket php!

public function onClose(ConnectionInterface $conn) {
  $conn->send("Close client");
}

我将使用 $conn->send() 为所有客户端发送消息,但我不知道如何在客户端上使用 autobahnJS 获取此消息?

更新 我找到了解决这个问题的方法!

1) 在 autobahnJS 中启用调试模式

ab.debug( true, true );

2) 使用 conn._websocket.onmessage 从服务器获取每个消息响应。

conn._websocket.onmessage = function (e){
    data = JSON.parse(e.data);
    console.log(data[1]);
    if(data.cat=='serverEvents'){
    switch(data.action) {
        case 'updateServerinfo':
              jQuery.updateServerinfo(data.actionData);
        break;
            }
        }
    };

谢谢大家。

【问题讨论】:

    标签: php websocket autobahn ratchet


    【解决方案1】:

    autobahnJS 有自己的方式来处理客户端向服务器发出的请求。您正在尝试从服务器向所有客户端发送请求(“关闭所有客户端”请求)。最好的方法是使用 JS 的 setInterval() 函数让线程每隔 X 秒轮询一次服务器以获取事件。例如:

    setInterval(checkForUpdate, 60 * 1000);

    在 checkForUpdate() 中:

    function checkForContentUpdate(timetableId) {
        var serviceUrl = 'http://yourscripttocheckhere';
    
        var xhr = $.ajax({url: serviceUrl, cache: false, success: function(content) {
          // Check server reply and act accordingly
        }});
    }
    

    【讨论】:

    • AutobahnJS 不使用 AJAX,但在 WebSocket 上工作(适用于 RPC 和 PubSub)。
    【解决方案2】:

    使用 AutobahnJS,您有两种与服务器端交互的方式:RPC 和 PubSub。如果你想从服务器向所有客户端发送消息,只需在所有客户端订阅某个主题 X 并从服务器发布到 X。

    披露:我是 Autobahn 的原作者,为 Tavendo 工作。

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2013-06-03
      相关资源
      最近更新 更多