腹板的缺点

Pac*_*ier 39 javascript web-services websocket

我想知道使用websockets有什么样的限制.

Websockets就是这么强大.我无法想象它没有缺点.

比如说,可以同时连接到服务器的用户数量是多少(如果我正在创建一个游戏,用户将通过WebSockets连接到游戏,什么会限制一次能够连接的用户数量?)

另外,每增加一个连接,连接质量(速度和类似的东西)都会降低吗?

sur*_*riv 39

优点和缺点当然取决于具体的用例,但我会试着指出WebSocket和HTTP之间的一些区别.

WebSocket比HTTP更复杂.您可以与telnet客户端建立HTTP连接,但您可能无法对WS执行相同操作.即使您忽略了握手要求(包括使用SHA1散列函数),您也无法正确屏蔽和构建要发送的数据,服务器将关闭连接.

正如Uwe所说,WebSocket连接旨在比HTTP连接更持久.如果您只想每30分钟收到一次更新,则需要使用HTTP.如果您希望每秒接收更新,则WebSocket可能是更好的选择,因为建立HTTP连接需要花费大量时间.

要建立HTTP连接,首先必须建立TCP连接(SYN,SYN/ACK,ACK),然后发送带有相当大的头的GET请求,然后最终接收服务器的响应(以及另一个大头).

使用开放的WebSocket,您只需接收响应(无需请求),并且它带有一个小得多的标头:从两个字节开始用于小型帧,最多10个字节用于可笑的大型帧(在千兆字节范围内).

您需要权衡两个成本(保持连接打开与建立新连接)以决定两个协议.

注意:这个答案是基于当前的协议草案(draft-ietf-hybi-thewebsocketprotocol-09).WebSocket正在快速发展,许多实现仍然基于较旧的草案,并且一些细节可能在最终确定之前发生变化.

  • PS:对于实时游戏,你可能想要WS; 对于基于回合的东西(如国际象棋),HTTP轮询可能是合适的. (3认同)
  • 这可能取决于游戏的快节奏,闪电国际象棋可能低至1秒,但在慢节奏的游戏中可能有5秒甚至10秒.最重要的是给用户一个很好的体验.我忘了提到的一点是你需要知道你的服务器如何处理连接(基于线程或基于事件).如果它为每个连接创建一个新线程,如果同时连接了许多用户,则会耗尽内存.如果它是事件驱动的,那么WS可以非常高效. (2认同)