【问题标题】:PHP web socket gets times out after some timePHP web socket在一段时间后超时
【发布时间】:2017-03-13 07:27:03
【问题描述】:

所以我是 web 套接字的新手,特别是 php,所以我尝试了这个名为 socketo.me 的帮助程序库。 一切正常,套接字连接获取消息,向所有客户端填充消息,但唯一的问题是它在我不知道的某个时间后超时。有一天我让套接字保持连接,第二天早上我来尝试连接,但它没有连接,我必须重新启动套接字(服务器继续运行)。 这是我用来运行套接字的代码。

public static function actioninitialize(){

    $server = IoServer::factory(
            new Chat(),
            28
    );

    $server->run();

}

28 是我使用的端口,Chat() 是我用来接收和填充消息的消息接口

 class Chat implements MessageComponentInterface {
protected $clients;

public function __construct() {
    $this->clients = new \SplObjectStorage;
}

public function onOpen(ConnectionInterface $conn) {
    // Store the new connection to send messages to later

    $this->clients->attach($conn);
    echo "New connection! ({$conn->resourceId})\n";
}

public function onMessage(ConnectionInterface $from, $msg) {




            foreach ($this->clients as $client) {
                    $client->send('eg' );
            }

}

public function onClose(ConnectionInterface $conn) {
    // The connection is closed, remove it, as we can no longer send it messages
    $this->clients->detach($conn);

    echo "Connection {$conn->resourceId} has disconnected\n";
}

public function onError(ConnectionInterface $conn, \Exception $e) {
    echo "An error has occurred: {$e->getMessage()}\n";

    $conn->close();
}
}

所以,我看到了他们的文档,但几乎找不到这个超时的东西来自哪里。我也看过 php 文档,看到了一些东西并尝试过,但没有任何帮助。 任何帮助将不胜感激。 谢谢。

【问题讨论】:

    标签: php sockets ratchet


    【解决方案1】:
    1. WebSocket 协议有一个名为ping-pong 的保活机制。您可能想在您的应用程序中尝试enable it。或者,您可以使用消息实现相同的功能。目标是向全世界展示您的 TCP 连接正在被使用。

    2. 连接一直中断的原因有很多,从意外关闭的浏览器选项卡到您的操作系统不喜欢长连接到您的 ISP 的 NAT 服务器崩溃。通常,应用程序应该能够检测到失败的连接,将其删除并创建新的连接,而不会对用户体验产生任何影响(尽管如果我们谈论的是聊天,reconnecting 消息会很好)。

    【讨论】:

    • 将尝试乒乓机制,看看它是否有效,同时它是否是每隔一个时间戳刷新连接的另一种方法。假设每 4 小时左右一次?
    • @sajawalsz 是的,这也是可能的。
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多