【发布时间】:2016-02-01 17:09:22
【问题描述】:
我正在寻找一个开源、跨平台、积极维护的 .NET 库,它为 客户端和服务器提供 websocket 功能,这样大部分代码(连接后已建立)可以使用相同的抽象,而不管它位于连接的哪一侧。理想情况下,这将是System.Net.WebSockets 的独立于平台的实现,但我并不关心它是否定义了自己的类型,只要有一些可以由客户端和服务器代码共享的抽象WebSocket 类即可。
我看过但不符合条件的东西(如果我错了,请纠正我):
- System.Net.WebSockets(仅限客户端,仅限 Win8+)
- WebSocket4Net(仅限客户端)
- WebSocket Portable(仅限客户端)
- Fleck(仅限服务器)
- WebSocketListener(仅限服务器)
- SuperWebSocket(仅限服务器)
- Owin.WebSocket(仅限服务器)
- PowerWebSockets(专有)
- XSockets(专有)
- Alchemy Websockets(最后一次发布于 2012 年,跟踪器中有许多活跃的错误没有答案)
我能找到的唯一一个似乎符合要求的是 websocket-sharp。然而,让我担心的是跟踪器中的 sheer number 已打开问题,如客户端无法连接、无效数据帧等 - 听起来它还不是很成熟。
是否还有其他符合我要求但我错过的候选人?或者我对上面列出的任何库都只是客户端/服务器有误?
【问题讨论】:
-
为什么您需要同时来自同一供应商的客户端和服务器? WebSocket 是一个标准,如果您以 WebSocketListener 和 WebSocket4Net 为例,它应该可以工作。如果你同时控制服务器和客户端......为什么是 WebSocket 而不是直接 TCP?
-
我真的不想在这里讨论太多细节(无论如何这在很大程度上是无关紧要的)。基本上,有两个组件需要相互通信,其中任何一个都可以是客户端和服务器,具体取决于具体场景。一旦在任一方向建立了连接,其余代码并不真正关心哪个是客户端,哪个是服务器。因此,我想要一个可以在任何地方使用的 websocket 抽象,这样唯一不同的代码路径就是建立连接的路径。
-
为什么不使用 TCP - websockets 具有 HTTP 免费提供的一些理想属性,例如代理连接的能力,以及通常与防火墙更好的交互等。
-
澄清一下,客户端和服务器库不需要来自同一个供应商,只要它们共享相同的抽象即可。例如。如果有两个单独的库,其中一个实现 websocket 客户端,另一个实现 websocket 服务器,但都通过实现
System.Net.WebSockets.WebSocket来实现,那么这对我有用。 -
根据我的经验,WebSocket 只是一种传输方式,您的软件永远不应该知道这些细节。通常我有自己的抽象,或者通信通过一个服务总线,一个监听器向队列写入消息并从队列中读取消息。