问题 通过TCP / IP优势WebSockets


我们有一个应用程序连接到服务器并每15秒发送一次位置。现在我们的客户要求将我们当前的TCP / IP连接“升级”到WebSocket。原因是他听说它使用的带宽更少,他希望将15秒减少到1秒。 (不是公共应用,所以电池耗尽不是真正的问题)

我已经做了一些研究和许多WebSockets与HTTP比较,但只有2或3个WebSocket与TCP / IP的比较。

我已经发现:

  1. WebSockets基本上与TCP / IP相同,但TCP / IP在比WebSockets更低的层上工作。
  2. WebSockets可能使用较少的带宽,因为其协议可能比我们当前的协议更有效。
  3. WebSockets在服务器端使用更多资源。

我的问题是:更改现有代码并使用WebSockets代替好的TCP / IP套接字是否值得?


3063
2017-08-03 07:42


起源



答案:


您似乎已经知道,webSocket IS建立在TCP / IP连接之上。它是建立在TCP之上的特定协议。

我的问题是:改变我们现有的代码和制作是否值得   使用WebSockets而不是好的'TCP / IP套接字?

如果您的代码已经可以与TCP套接字一起使用,并且您不需要与浏览器客户端进行互操作,并且您不需要内置到webSockets中的任何特定功能,那么就没有理由重写功能完善的TCP套接字代码。

我们有一个连接到服务器并将其发送到位置的应用程序   每15秒一次。现在我们的客户要求“升级”我们的电流   TCP / IP连接到WebSocket。原因是他听到了   使用较少的带宽,他希望将15秒减少到1   第二。 (不是公开申请,所以电池耗尽不是真的   问题)

webSocket是否比现有TCP连接带宽更高,完全取决于您现在在TCP连接上运行的协议。如果您现有的协议效率非常低,那么无论是webSocket还是其他东西,您都可以从使用更高效的协议中受益。如果切换到webSocket会减少15秒到1秒之间的任何事情,我会感到惊讶,除非你现在拥有的实现效率非常低。

如果我们能够准确地看到您现有的代码/协议如何工作,我们只能对这两个协议之间的比较进行进一步评论。如果你现在拥有的东西真的很糟糕,那么切换到像webSockets这样专业设计的系统可能对你有所帮助,但是webSockets中没有什么能比其他一些设计良好的协议更有效率。


使用webSocket通过普通TCP连接与其他协议的一些原因如下:

  1. 当您希望浏览器能够连接到您时(浏览器支持普通的http请求和webSocket连接 - 就是这样)。

  2. 当您特别想要webSocket提供的消息传递范例类型时,您还没有通过TCP使用的特定协议(换句话说,当webSocket使您无需实现自己的协议时)。

  3. 当您想要连接到其他类型的客户端时,可以更轻松快速地使用webSocket连接,而不是其他协议或您的自定义协议。

  4. 当您尝试与Web服务器共享端口时。根据其通过HTTP连接启动的性质,然后切换到webSocket协议,webSockets可以在与HTTP服务器相同的端口上运行(与Web服务器共享)。

  5. 当您需要与http和WebSockets提供的代理和其他网络基础结构的互操作性时。


12
2017-08-03 08:36



与第5点相关,值得指出的是,互操作性还意味着防火墙和NAT路由器更加容易,因此网络流量被阻止的可能性较小。 - Myst
@Myst - 是的,这可能是一个重要的好处。这肯定是webSockets通常在端口80上运行并以HTTP连接开始的原因之一。 - jfriend00
比较TCP / IP与WebSocket的速度。 (RAW)TCP / IP连接将比WebSocket连接更快,因为WebSocket是TCP / IP之上的层(因此最多必须与TCP / IP本身一样快)。应该注意的是,您在TCP / IP之上使用的协议的实现可能比WebSockets更糟糕。例如,您可以保持打开TCP / IP连接,而不是始终打开和关闭TCP / IP连接。 - Paul
@Paul - OP将其当前实现称为TCP之上的协议。我们不知道该协议是什么,所以我们不知道它与webSocket协议的效率如何,除了客户认为webSocket可能更有效(尽管可能实际上并不知道)。可以设计比webSocket更特殊和更高效的东西,但也可以设计效率低于webSocket的东西。因此,这一切都取决于他们已经拥有什么以及需要什么类型的效率 - 两者都没有具体说明。 - jfriend00


答案:


您似乎已经知道,webSocket IS建立在TCP / IP连接之上。它是建立在TCP之上的特定协议。

我的问题是:改变我们现有的代码和制作是否值得   使用WebSockets而不是好的'TCP / IP套接字?

如果您的代码已经可以与TCP套接字一起使用,并且您不需要与浏览器客户端进行互操作,并且您不需要内置到webSockets中的任何特定功能,那么就没有理由重写功能完善的TCP套接字代码。

我们有一个连接到服务器并将其发送到位置的应用程序   每15秒一次。现在我们的客户要求“升级”我们的电流   TCP / IP连接到WebSocket。原因是他听到了   使用较少的带宽,他希望将15秒减少到1   第二。 (不是公开申请,所以电池耗尽不是真的   问题)

webSocket是否比现有TCP连接带宽更高,完全取决于您现在在TCP连接上运行的协议。如果您现有的协议效率非常低,那么无论是webSocket还是其他东西,您都可以从使用更高效的协议中受益。如果切换到webSocket会减少15秒到1秒之间的任何事情,我会感到惊讶,除非你现在拥有的实现效率非常低。

如果我们能够准确地看到您现有的代码/协议如何工作,我们只能对这两个协议之间的比较进行进一步评论。如果你现在拥有的东西真的很糟糕,那么切换到像webSockets这样专业设计的系统可能对你有所帮助,但是webSockets中没有什么能比其他一些设计良好的协议更有效率。


使用webSocket通过普通TCP连接与其他协议的一些原因如下:

  1. 当您希望浏览器能够连接到您时(浏览器支持普通的http请求和webSocket连接 - 就是这样)。

  2. 当您特别想要webSocket提供的消息传递范例类型时,您还没有通过TCP使用的特定协议(换句话说,当webSocket使您无需实现自己的协议时)。

  3. 当您想要连接到其他类型的客户端时,可以更轻松快速地使用webSocket连接,而不是其他协议或您的自定义协议。

  4. 当您尝试与Web服务器共享端口时。根据其通过HTTP连接启动的性质,然后切换到webSocket协议,webSockets可以在与HTTP服务器相同的端口上运行(与Web服务器共享)。

  5. 当您需要与http和WebSockets提供的代理和其他网络基础结构的互操作性时。


12
2017-08-03 08:36



与第5点相关,值得指出的是,互操作性还意味着防火墙和NAT路由器更加容易,因此网络流量被阻止的可能性较小。 - Myst
@Myst - 是的,这可能是一个重要的好处。这肯定是webSockets通常在端口80上运行并以HTTP连接开始的原因之一。 - jfriend00
比较TCP / IP与WebSocket的速度。 (RAW)TCP / IP连接将比WebSocket连接更快,因为WebSocket是TCP / IP之上的层(因此最多必须与TCP / IP本身一样快)。应该注意的是,您在TCP / IP之上使用的协议的实现可能比WebSockets更糟糕。例如,您可以保持打开TCP / IP连接,而不是始终打开和关闭TCP / IP连接。 - Paul
@Paul - OP将其当前实现称为TCP之上的协议。我们不知道该协议是什么,所以我们不知道它与webSocket协议的效率如何,除了客户认为webSocket可能更有效(尽管可能实际上并不知道)。可以设计比webSocket更特殊和更高效的东西,但也可以设计效率低于webSocket的东西。因此,这一切都取决于他们已经拥有什么以及需要什么类型的效率 - 两者都没有具体说明。 - jfriend00