如何设置实时 WebSocket 缓冲区?

How can I set Realtime WebSocket buffer?

我正在开发一款使用 Ratchet 0.3.3、Laravel 5 和 PHP 5.5.9 构建的实时多人游戏,服务器 OS 是 Ubuntu .服务器在每个周期内通过 WebSocket 向每个用户(数百个用户)发送大约 500 字节的数据。 看起来 WebSocket 正在缓冲请求并一次发送 5 到 6 个请求(每个 500 字节)。 我们有 30 毫秒的周期。有没有一种方法可以手动设置 WebSocket 缓冲区设置,以便可以毫无延迟地发送我的请求?

Azure 本身对 Ubuntu VM 的缓冲区设置没有任何限制。首先,我将使用此处列出的命令检查当前缓冲区设置值 - How to find the socket buffer size of linux。 其次,如果你想配置或调整它们,你可以参考 - http://www.cyberciti.biz/faq/linux-tcp-tuning/

不确定这是否是您正在寻找的答案,正如 Ghedipunk 指出的那样,这可能是 Nagle 算法的问题,在这种情况下,您可能想尝试在隧道中添加 tcp_nodelay 配置配置 -

套接字=l:TCP_NODELAY=1 套接字 = r:TCP_NODELAY=1

尽管我个人从未与 Ratchet 合作过。

PS- 我想将其添加为评论,因为我不确定这是否是您正在寻找的正确答案,但 SO 论坛不允许我添加评论。

我找到了解决该问题的方法。首先,IoServer class 从 Ratchet 创建并扩展了 IoServer。

class IoServer extends \Ratchet\Server\IoServer {

    public static function factory(MessageComponentInterface $component, $port = 80, $address = '0.0.0.0') {
        $loop   = LoopFactory::create();
        $socket = new Reactor($loop);
        $socket->listen($port, $address);
        $sock = socket_import_stream($socket->master);
        socket_set_option($sock, SOL_TCP, TCP_NODELAY, true);

        return new static($component, $socket, $loop);
    }
}