【问题标题】:nagle's algorithm in socket.iosocket.io 中的 nagle 算法
【发布时间】:2012-03-29 09:36:02
【问题描述】:

有人知道在使用 socket.io 时如何配置 nagle 的算法(打开或关闭)吗?
这个选项甚至是随 socket.io 提供的吗?
我假设默认行为配置为使用 nagle 的算法(如果我错了,请纠正我)。

理想情况下,我希望在不同应用程序中根据需要使用 socket.io 时配置 nagle 的算法(开/关) - 无论我可能使用哪个 Web/应用程序服务器。

谢谢!

【问题讨论】:

    标签: socket.io nagle


    【解决方案1】:

    nagle算法可以切换

    int socket_descriptor;  
    BOOL bOptVal = TRUE;
    int bOptLen = sizeof(BOOL);
    // get a socket:
    socket_descriptor = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
    /* ... bind the socket, listen to it
        .
        .
    */
    // set the socket to non-blocking mode:
    ioctlsocket(socket_descriptor, FIONBIO, 1);
    
    // disable nagle:
    setsockopt(socket_descriptor, IPPROTO_TCP, TCP_NODELAY, (char*)&bOptVal, bOptLen);
    

    编辑: 在 .NET 中,它是 Socket.NoDelay 属性。

    socket.io 中,nagle 算法已经为 websockets 禁用,并且为其他传输禁用它是 beeing discussed(截至 2012 年 4 月)。

    【讨论】:

    • +1 用于添加信息 - 很高兴看到功能已添加。
    • 这个答案不正确。如果问题是关于传统的“BSD”套接字,又名 TCP 套接字,又名 winsock 等,那将是正确的,但问题是关于名称不佳但功能强大的“socket.io”库,您可以在以下位置了解更多信息:http://socket.io/
    • @ShawnYarbrough:感谢您的提示。我更正了信息并添加了 socket.io nagle 讨论的当前状态
    【解决方案2】:

    根据 Guillermo Rauch,默认情况下,对于 socket.io 中的 Web 套接字,Nagle 的算法是关闭的。我将提交一个请求以使其可配置(希望这将在未来的版本中进行查看)。

    感谢吉列尔莫。

    【讨论】:

      猜你喜欢
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 2016-02-08
      • 2017-02-08
      • 2013-07-24
      相关资源
      最近更新 更多