Node.Js + Socket.IO vs SignalR vs C# WebSocket 服务器

     2023-02-16     175

关键词:

【中文标题】Node.Js + Socket.IO vs SignalR vs C# WebSocket 服务器【英文标题】:Node.Js + Socket.IO vs SignalR vs C# WebSocket Server 【发布时间】:2012-03-02 17:24:40 【问题描述】:

我目前有一个用 .Net 编写的 TCP 服务器应用程序,用于接收并向客户端提交消息。我正在考虑构建一个 Web 应用程序,因此需要通信层。

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

我刚刚阅读了有关 SignalR 作为将其保留在 .Net 堆栈中的替代方案。

不过我也发现我可以写一个C# Websocket Server,一个基本的demo here

我假设这个基本服务器就是 SignalR,但显然其中包含更多功能?

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

【问题讨论】:

有关信息,您也可以尝试 SuperWebSocket。目前,我只是直接写了一个 WebSocket 服务器。只有 2 个关键协议在起作用(其余的实际上是相同的变体),所以它并不庞大。我部分在等待 .net 4.5 / win8,其中包括 WebSocket 服务器支持 OOTB。 @MarcGravell 谢谢。这是一篇显示 .Net 4.5 Websocket 服务器marcinbudny.blogspot.com/2011/10/… 的帖子,不过我不确定服务器是如何运行的。 不要忘记,socket.io 不仅仅是 websockets,它还回退到长轮询等。 @MarcGravell 一年后。你更喜欢哪个(体验vs2012 signalR和node之后)? @Royi 我将间接回答:我们仍然是我们的自定义套接字服务器,并计划以 F/OSS 的形式发布代码 【参考方案1】:

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

SignalR 支持浏览器 (JS)、.NET、Windows Phone 7 和 Silverlight 的客户端。 iOS、Mono Touch 等也有贡献的客户。

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

【讨论】:

【参考方案2】:

其他含义

我使用过这两种技术,并且在 .NET / 节点堆栈的两边都工作过。

    虽然我现在更喜欢节点端,但如果您只在 .NET 中工作,那么 SignalR 是显而易见的选择。相反,如果您在节点中构建所有项目,我会使用 socket.io 或sockjs。如果您的范围足够窄以至于您不需要担心回退之类的事情,我建议您查看ws 模块,因为它对您的依赖项更简单、更轻。过去,由于 node-gyp 无法安装本机依赖项的安装问题,socket.io 在 Windows 上一直很痛苦(node-gyp 需要许多配置步骤,这些步骤取决于您拥有的 Windows 版本,但对于 C++ 是必需的本机构建的模块)。 更新感谢windows-build-tools,这个 Windows 位不再那么重要了。 如果您有负载均衡器并计划运行 SignalR,则需要将 SQL 或 Redis 设置为背板以绕过负载均衡器。您将在 socket.io 端处理类似的问题,并且有[多种支持的方法][1](其中 1 种也是 redis)。

更新 - 删除 jquery 信息,因为它不再适用

【讨论】:

实际上 SignalR JavaScript 客户端库 2.2.0(于 2015 年 1 月发布)支持任何版本的 jQuery >= 1.6.4。也就是说,您不必复制 jQuery 的版本(无论如何都会中断)。我刚刚使用 SignalR JavaScript 客户端版本 2.2.0 和 jQuery 2.1.4 在 Chrome、IE 和 Firefox 中运行的示例聊天应用程序验证了这种情况。此外,大多数浏览器很可能缓存了兼容的 jQuery 副本。 对于那些不知道的人,SignalR 现在作为 Azure 提供的一项服务,由 Azure 为您管理其可扩展性方面。他们还有一个免费的层级可以玩。【参考方案3】:

开发可扩展/线程安全的 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

【讨论】:

前面提到的广告,Signalr 有传输回退,所以如果不支持 Web 套接字(在服务器或客户端上)它会落入其他传输类型等等.. 不是 SignalR 需要 Windows Server 2012,所以不是它的错。

Node.js 和 socket.io 的混淆

】Node.js和socket.io的混淆【英文标题】:Node.jsandsocket.ioconfusion【发布时间】:2012-12-0712:42:54【问题描述】:我经常看到诸如“Node.JS+socket.io教程”之类的标题。即使在我购买的Node.jsBeginner书中,它也告诉我要下载socket.io,所以我... 查看详情

Node.js - Socket.io:socket.request 未定义

】Node.js-Socket.io:socket.request未定义【英文标题】:Node.js-Socket.io:socket.requestundefined【发布时间】:2015-01-0408:05:29【问题描述】:我已经阅读了here,我可以在node.js中获取客户端的IPsocket.request.connection.remoteAddress例如:varsocket=io.list... 查看详情

node.js + socket.io:拍卖网站开发

】node.js+socket.io:拍卖网站开发【英文标题】:node.js+socket.io:auctionwebsitedevelopment【发布时间】:2016-05-0119:00:48【问题描述】:我目前正在使用node.js和socket.io编写拍卖脚本。但是该网站是使用PHP和MySQL开发的。在这里,我仅将node.j... 查看详情

Heroku 上的 socket.io + node.js

】Heroku上的socket.io+node.js【英文标题】:socket.io+node.jsonheroku【发布时间】:2012-07-2508:23:33【问题描述】:我在heroku上编译socket.io应用程序时遇到了一些问题。这就是app.js文件varapp=require(\'express\').createServer(),io=require(\'socket.io\').lis... 查看详情

Node.js 使用 socket.io 进行重构

】Node.js使用socket.io进行重构【英文标题】:Node.jsrestifywithsocket.io【发布时间】:2012-10-1713:51:40【问题描述】:是否可以像express和socket.io一样在同一个端口上运行socket.io和restify?我就是这样做的,但是没有用#server.coffeerestify=requi... 查看详情

Node.js socket.io.js 未找到或 io 未定义

】Node.jssocket.io.js未找到或io未定义【英文标题】:Node.jssocket.io.jsnotfoundorionotdefined【发布时间】:2012-05-2017:48:36【问题描述】:我正在尝试在我的freebsd服务器上运行node.js应用程序,但我无法让socket.io库使用它。我试过包括:<s... 查看详情

找不到Node.js /socket.io/socket.io.js express 4.0

】找不到Node.js/socket.io/socket.io.jsexpress4.0【英文标题】:Node.js/socket.io/socket.io.jsnotfoundexpress4.0【发布时间】:2014-06-0411:32:06【问题描述】:所以我试图在我的网站上进行聊天,当我在本地进行测试时,它运行良好,因为我的本地... 查看详情

Node.js、多线程和 Socket.io

】Node.js、多线程和Socket.io【英文标题】:Node.js,multi-threadingandSocket.io【发布时间】:2012-01-2316:55:53【问题描述】:我希望Socket.io在Node.jsv.0.6.0及更高版本中使用nativeloadbalancing(“集群”)进行多线程工作。据我了解,Socket.io使用... 查看详情

Node.js Websockets Socket.IO

】Node.jsWebsocketsSocket.IO【英文标题】:【发布时间】:2011-03-2809:52:10【问题描述】:我无法触发客户端事件,请查看代码/说明:好的,所以我得到了这个工作(我想)客户端代码:<scriptsrc="./Socket.IO/socket.io.js"></script><... 查看详情

Node.js Socket.io 页面刷新多个连接

】Node.jsSocket.io页面刷新多个连接【英文标题】:Node.jsSocket.iopagerefreshmultipleconnections【发布时间】:2017-06-1422:47:24【问题描述】:我有这个使用socket.io(1.5)的简单node.js服务器代码:vario=require(\'socket.io\').listen(8080);io.on(\'connection\',f... 查看详情

HTTP 状态代码 200 但页面未加载 Node.js Socket.io -- 使用 Socket.io 的 Node.js 教程,Daniel Nill,fs.readFile(),socket

】HTTP状态代码200但页面未加载Node.jsSocket.io--使用Socket.io的Node.js教程,DanielNill,fs.readFile(),socket.html【英文标题】:HTTPStatusCode200butpagedoesnotloadNode.jsSocket.io--Node.jsTutorialWithSocket.io,DanielNill,fs.readFile(),socket.html【 查看详情

node.js + express.js + socket.io 授权:没有cookie

】node.js+express.js+socket.io授权:没有cookie【英文标题】:node.js+express.js+socket.ioauthorization:nocookie【发布时间】:2011-12-2305:33:43【问题描述】:我无法从我的socket.io授权中获取“cookie”数据。io.configure(function()io.set(\'authorization\',functi... 查看详情

Node.js socket.io 没有响应 iOS socket.io 发出请求

】Node.jssocket.io没有响应iOSsocket.io发出请求【英文标题】:Node.jssocket.ionotrespondingtoiOSsocket.ioemitrequests【发布时间】:2016-01-1203:10:07【问题描述】:我似乎无法弄清楚这一点。我正在测试使用socket.io将iOS客户端应用程序与Node.js服务... 查看详情

多人 HTML5、Node.js、Socket.IO

】多人HTML5、Node.js、Socket.IO【英文标题】:MultiplayerHTML5,Node.js,Socket.IO【发布时间】:2011-09-0819:26:21【问题描述】:我尝试使用HTML5Canvas、JavaScript(也使用JohnResig简单继承库)和带有Socket.IO的Node.js创建简单的多人游戏。我的客户... 查看详情

Node.js:socket.io 关闭客户端连接

】Node.js:socket.io关闭客户端连接【英文标题】:Node.js:socket.iocloseclientconnection【发布时间】:2013-08-1004:54:21【问题描述】:如何关闭客户端的套接字连接?我正在使用:socket.io0.9node.js0.10.15表达3.3.4即:致电localhost/test--服务器端v... 查看详情

Node.JS 寻找 socket.IO 的替代方案

】Node.JS寻找socket.IO的替代方案【英文标题】:Node.JSLookingforanalternativetosocket.IO【发布时间】:2010-10-1204:49:40【问题描述】:我已经测试Node.JS和Socket.IO几天了。我对实时应用程序感兴趣,这就是我测试Socket.IO的原因,问题是我在... 查看详情

Node.js + Socket.io 在套接字中存储数据

】Node.js+Socket.io在套接字中存储数据【英文标题】:Node.js+Socket.ioStoringdatainsockets【发布时间】:2013-08-2101:50:45【问题描述】:我目前正在使用node.js和socket.io模块构建一个应用程序。当用户连接时,我将针对用户的套接字存储特... 查看详情

现有 node.js 项目中的 socket.io

】现有node.js项目中的socket.io【英文标题】:socket.ioinexistingnode.jsproject【发布时间】:2019-08-2811:15:55【问题描述】:我希望在具有node.js后端的应用程序中实现实时更新。我想为此使用socket.io,并且我了解需要实现的库。但是,我... 查看详情