我目前有一个用 .Net 编写的 TCP 服务器应用程序,用于接收消息并向客户端提交消息。我正在考虑构建一个 Web 应用程序,因此需要通信层。
我构建了一个 Node.JS + Socket.IO 应用程序,它连接到我的 TCP 服务器,然后将通信推送到 Web 应用程序,一切正常。
我刚刚阅读了有关 SignalR 作为将其保留在 .Net 堆栈中的替代方案的信息。
但是我也发现我可以编写一个 C# Websocket 服务器,一个基本演示这里
我认为这个基本服务器就是 SignalR,但显然它还有更多功能?
我想要决定的是,我是否只是将当前的 TCP 应用程序附加到 Websocket 服务器,还是走单独的 SignalR 或 Node.js 路线?出于兴趣,SignalR 应用程序如何运行,它是作为 Windows 服务、控制台应用程序还是 IIS 服务?
SignalR 与 Socket.IO 类似,它支持传输协商/回退。它是一个框架而不是服务器,因此您需要将其托管在某种服务器上。我们有 ASP.NET、OWIN(例如 Kayak)和自托管主机,因此您可以轻松地在自己的进程中运行它,例如Windows 服务。
SignalR 支持浏览器 (JS)、.NET、Windows Phone 7 和 Silverlight 的客户端。还有 iOS、Mono Touch 等的贡献客户端。
SignalR 将为您提供比原始套接字更高级别的 API,这是它的一大优势,允许您以广播(或有针对性)的方式执行从服务器到客户端的“RPC”之类的操作。
我使用了这两种技术,并在 .NET/节点堆栈的两侧工作。
更新 - 删除了 jquery 信息,因为它不再适用
开发一个可扩展/线程安全的 TCP 服务器可能不是一件容易的事。另一方面,互联网上有非常好的资源可以帮助您创建自己的资源。例如,如果您只是在寻找一些不错的开源 WebSocket 项目,我的建议是;
Alchemy 项目:开源 C# WebSocket 库
Fleck 项目:开源 C# WebSocket 库
SignalR 可能不错,但它需要 Windows Server 8 / IIS 8 才能提供 WebSocket 功能。
在商业产品方面,特别是考虑到 websocket 功能并非在所有浏览器上都可用,我推荐 PokeIn WebSocket 和反向 Ajax 库。从2.0版本开始它内置了WebSocket服务器。详情请参阅这里
这是一种非常酷的方式来处理必须实时传输给其他用户的实时消息或数据。我之前确实将它与react.js一起使用过,非常有用。
SignalR 适用于 Polling 和 Websockets,但使用 Polling 并不是一个好主意,因为它会占用大量带宽,并且可能会减慢您的应用程序速度。
在 websockets 上,用户和服务器之间将始终保持打开的连接,该连接是在用户进入应用程序的特定部分时首次建立的。请始终检查连接是否仍处于活动状态,如果由于某种原因连接超时,请重新初始化连接(您可以通过在 js 中每 5 秒使用 setInterval 或其他方式来执行此操作)。然后要注意消息的传播方式,以免发送给错误的人,并注意可访问性(例如,使用 guid 作为特定连接的组 ID)。最后,如果传输的数据至关重要,请使用加密/解密方法。
SignalR 的一大优势是它不使用服务器端的缓存。