我需要构建一个服务器+客户端库来从TimeSeriesDb数据库请求数据,并且有许多不同的套接字和websocket库可用于.NET,此外我还可以自己实现。因此,真的可以就如何进行提出建议。
我找到了SuperSocket和基于它的WebSocket4net、XSockets和SignalR。还有微软的WebSocket实现,即将推出.NET 4.5,这可能会使其他实现过时。
然而,WebSocket是针对web&实时更新,而不是我需要的二进制请求响应,因为客户端也是不在浏览器中的.NET库。
详细信息:
数据库请求和响应都是二进制的:
客户端:获取给定参数的数据(二进制数据块)
服务器:开始发送数据流(作为二进制块),客户端可以随时停止传输。
我的目标是.NET 4,所以TPL任务可能会受益于异步功能。
很好:流复用,多个请求/响应可以通过同一个连接(每个响应一个块)。我不确定是否需要这样做,或者多个连接是否会更好地工作。
WebSockets具有二进制类型的数据,使用基于官方文档RFC6455的操作码%x2。
WebSockets也为它发送的每个数据消息实现了成帧。对于小数据包,这将是合理的流量开销。
如果没有计划将来支持从前端连接到数据库。然后我不明白你为什么要使用WebSockets。它比纯二进制通信更复杂,您必须实现或使用WebSockets的现成解决方案。我相信使用二进制序列化的纯TCP套接字对内存和数据包处理非常有效。我建议您查看一下GoogleProtocol Buffer,并检查一下.Net的实现情况。
这将允许您以良好的方式打包消息数据,并将增加将来与实现该协议的其他应用程序通信的能力。同样,如果您正在将数据协议构建到数据库中,那么最好通过选择数据协议来创建握手,然后服务器将使用客户端更喜欢通信的可用实现之一。
您可能也有兴趣在.Net中使用内置序列化功能。