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

Posted

技术标签:

【中文标题】构建二进制套接字 .NET 服务器:自定义 vs. SignalR vs XSockets vs WebSocket4Net?【英文标题】:Building binary socket .NET server: custom vs. SignalR vs XSockets vs WebSocket4Net? 【发布时间】:2012-04-02 02:38:36 【问题描述】:

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

我找到了基于它的SuperSocket 和WebSocket4net、XSockets 和SignalR。还有 Microsoft's WebSocket 实现与 .NET 4.5 一起出现,可能会使其他实现过时。

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

详情:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于构建二进制套接字 .NET 服务器:自定义 vs. SignalR vs XSockets vs WebSocket4Net?的主要内容,如果未能解决你的问题,请参考以下文章

ASP .NET CORE 找不到带有自定义程序集的文件或程序集

vs编译自定义编译任务 记录

构建 VS2008 .NET 3.0 解决方案,无需在构建服务器上安装 .NET 3.5

在设计期间在 VS(10) 中调试 C# .NET 自定义组件/控件

ASP.NET用户自定义控件

AS3 安全套接字添加二进制链构建证书不可用?