构建二进制套接字.NET服务器:自定义与SignalR对比XSockets对WebSocket4Net?

时间:2012-04-02 02:38:37

标签: .net sockets websocket

我需要构建一个服务器+客户端lib来从我的TimeSeriesDb database请求数据,并且有许多不同的socket和websocket库可用于.NET,而且我可以自己实现。因此 - 可以真正使用如何继续的建议。

我找到了基于它的SuperSocketWebSocket4netXSocketsSignalR。 .NET 4.5还推出了Microsoft's WebSocket实现,可能会使其他人过时。

然而,WebSockets针对网络进行了优化。实时更新,而不是我需要的二进制请求响应,因为客户端也是不在浏览器中的.NET库。

详细说明:

db请求和响应都是二进制文件:

客户端:获取给定参数的数据(一块二进制数据)
服务器:开始发送数据流(作为二进制块),客户端可以随时停止传输。

我的目标是.NET 4,因此TPL Tasks可能会受益于异步功能。

很高兴:流复用,其中多个请求/响应可以通过同一连接(依次为每个响应一个块)。我不确定是否需要这样做,或者多个连接是否会更好。

1 个答案:

答案 0 :(得分:2)

WebSockets使用基于官方文档RFC6455的操作码%x2的二进制数据类型。

WebSockets也会为它发送的每条数据消息实现框架。对于小数据包,这将是合理的流量开销。

如果没有计划将来支持从前端连接到您的数据库。然后我不明白你为什么要使用WebSockets。它比纯二进制通信更复杂,您必须为WebSockets实现或使用现成的解决方案。 我相信,对于使用具有二进制序列化的纯TCP套接字的数据包的内存和处理来说,它是非常有效的。我建议您查看Google Protocol Buffer,然后查看.Net implementation

这将允许您以良好的方式打包您的消息数据,并且还将增加与将来实现此协议的其他应用程序通信的能力。 如果您正在将数据协议构建到数据库中,那么通过选择数据协议来创建握手会更好,然后服务器将使用客户端更喜欢通信的可用实现之一。

您可能也对使用.Net中的内置序列化功能感兴趣。