首页 文章

Node.Js Socket.IO vs SignalR vs C#WebSocket Server

提问于
浏览
66

我目前有一个用.Net编写的TCP服务器应用程序,它接收并向客户端发送消息 . 我正在寻找构建Web应用程序,因此需要通信层 .

我已经构建了一个Node.JS Socket.IO应用程序,它连接到我的TCP服务器,然后将通信推送到Web应用程序,一切正常 .

我刚刚读到有关SignalR作为将其保留在.Net堆栈中的替代方法 .

但是我也发现我可以写一个C#Websocket服务器,一个基本的演示here

我认为这个基本服务器就是SignalR,但显然它有更多功能吗?

我想要决定的是,我只是将我当前的TCP应用程序附加到Websocket服务器上,还是单独使用SignalR或Node.js路由?出于兴趣,SignalR应用程序如何运行,它是作为Windows服务,控制台应用程序还是IIS服务?

3 回答

  • 72

    SignalR就像Socket.IO一样,它支持传输协商/回退 . 它是一个框架而不是服务器,因此您需要在某种服务器上托管它 . 我们有ASP.NET,OWIN(例如Kayak)和自托管的主机,因此您可以轻松地在自己的过程中运行它,例如一个Windows服务 .

    SignalR支持浏览器(JS),.NET,Windows Phone 7和Silverlight的客户端 . iOS,Mono Touch等也为客户提供服务 .

    SignalR将为您提供比原始套接字更高级别的API,这是它的一大优势,允许您以广播(或目标)方式从服务器到客户端执行“RPC”之类的操作 .

  • 15

    其他影响

    我已经使用了这两种技术并在.NET /节点堆栈的两端工作 .

    • 虽然我现在更喜欢节点方面,但如果你只使用.NET,那么SignalR是显而易见的选择 . 相反,如果您在节点中构建所有项目,我将使用socket.io或sockjs . 如果您的范围足够窄,那么建议您查看ws模块,因为它对您的依赖项更简单,更轻松 . 在过去,socket.io在Windows上一直很痛苦,因为node-gyp的安装问题无法安装本机依赖项(node-gyp需要许多配置步骤,这些步骤根据您拥有的Windows版本而有很大差异,但是C native本身需要模块) . UPDATE 由于windows-build-tools,这个Windows位不再那么相关了 .

    • 如果您有负载均衡器并且计划运行SignalR,则需要将SQL或Redis设置为背板以绕过负载均衡器 . 你将在socket.io方面遇到类似的问题,并且有[多种支持的方法] [1](其中1种也是redis) .

    Update - removed jquery info since it is no longer applicable

  • 18

    开发可伸缩/线程安全的TCP服务器可能不是一件容易的事 . 另一方面,互联网上有非常好的资源,以便开始自己的 . 例如,如果您只是在寻找一些不错的开源WebSocket项目,我的建议是:

    Alchemy Project:开源C#WebSocket库

    Fleck Project:开源C#WebSocket库

    SignalR可能不错,但它需要Windows Server 8 / IIS 8才能提供WebSocket功能 .

    在商业产品方面,特别是考虑到websocket功能并非在所有浏览器上都可用,我推荐使用PokeIn WebSocket和反向Ajax库 . 从2.0版开始,它具有内置的WebSocket服务器 . 详细信息可从here获取

相关问题