所以... ASP.NET MVC和WebSockets的?(So… ASP.NET MVC and

2019-07-30 08:10发布

我在MVC 3应用程序,我希望增加的WebSockets(回退到彗星)它。

我研究了一下,我发现了彗星的部分是非常简单,我宁愿做我自己。 只是AsyncControllers和JS的一个非常简单的一点是所有的需要来处理这些长寿命Ajax请求。

现在,WebSocket的情况下,事情开始变得肮脏。 我看了一些库,但他们大多似乎设置Web服务器(因此需要另一台主机或端口)的自己,并听取WS协议请求那里。 这是实例的情况下SuperWebSocket ,这似乎在首好听,但是有这个“我是一个web服务器”的问题(这是完全正常的,当然,但我宁愿避免)。

然后我看着“PingIt”或类似的东西,我现在找不到链接..,我有另一台计算机上的源虽然。 这一个人在MVC的端点上运行,但我不太喜欢在它处理的事情,比如它需要一个IDisposable的对象,并通过反射它创建获取客户端呈现一个JavaScript一块,这是非常污染的方式他们的图书馆的名字,我现在已经在真的没有兴趣,再加上感觉就像是被扔在它的很多反对什么,我可能想,哪一种违背我的观点在页面应该如何呈现喜欢(特别是那我在MVC工作这几乎意味着我可以编写干净,不显眼的html页面)。

基本上,我要的是我的端点是这样的:

domain.com/rt/comet
domain.com/rt/socket

而不是

domain.com/rt/comet
domain.com:81/

所以:是否有可能接受WebSocket连接(和做握手和需要做什么)在端点上一个asp.net MVC应用程序的控制器内,而不是某个地方设立的TcpListener?

这也将有助于我保持我的彗星代码有点接近我的WebSocket代码

我应该说我是认真新来的整个彗星/ WebSockets的事情,所以我真的不知道多少(或任何)协议的,我明白如何使彗星的工作,而不是在WebSockets的这么多,虽然我读过和理解的基础,以得到它的要点。

另外:请让我知道如果我要问的路要走

Answer 1:

只是要与意见达成一致,并提供几个环节。 SignalR是要走的路。

网站: http://signalr.net/和http://www.asp.net/signalr

代码: https://github.com/SignalR/SignalR

的NuGet: Install-Package Microsoft.AspNet.SignalR -pre

良好的出发点:

  • 免费的电子图书http://www.eduardopires.net.br/Repositorio/SignalR_eBook.pdf

  • http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

  • http://www.dotnetcurry.com/ShowArticle.aspx?ID=780

  • http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx

从视频的创造者之一: http://vimeo.com/43659069 - [!大量的信息<



Answer 2:

至于这个线程上的WebSockets的一个参考点 - 我要你注意,乍一看,WebSockets的样子的不二之选。 API被设计成在单一的TCP套接字提供浏览器和服务器之间的双向通信信道。 它已经由IETF和最新的Chrome,火狐,IE标准化和Opera浏览器都支持WebSockets的。 它旨在通过减少HTTP消息开销,以尽量减少带宽开销。 那么,有什么不一样?

像任何知觉银弹,事情并不象它看上去那样。 的许多问题存在:

浏览器支持:截至2012年6月,只有47.64%的企业目前正在使用的浏览器的实际支持的WebSockets http://caniuse.com/websockets -这意味着,无论多么的WebSockets出现好,你还需要第二个“回退”的解决方案,以支持广大网民。 由于大多数“回退”的解决方案涉及的Flash,你还是运气iOS和其他移动设备。

了解更多关于从这个博客帖子现实的WebSockets: 是HTML5 WebSockets的网关和服务器的灵丹妙药实时数据推送

浏览器支持更新:截至5月2019年,目前在使用浏览器的96.77%,实际支持WebSockets的http://caniuse.com/websockets



Answer 3:

我研究了一下,我发现了彗星的部分是非常简单,我宁愿做我自己。 只是AsyncControllers和JS的一个非常简单的一点是所有的需要来处理这些长寿命Ajax请求。

对不起,这不是那么容易。 不同的浏览器的行为以不同的方式表现的更好使用不同的技术 - 的XMLHttpRequest,XDomainRequest,ActiveX对象,Multpart代替,长轮询,流。 正因为如此,而且也为这些解决方案没有定义规范的事实, 彗星只是一个黑客 。 服务器发送事件(EventSource的API)和WebSockets的已经从底层向上设计,提供从服务器将数据推送到客户端的最有效和标准化的方式,和更重要的WebSockets已经设计了一个客户端之间的实时双向通信和服务器。

现在,WebSocket的情况下,事情开始变得肮脏。 我看了一些库,但他们大多似乎设置Web服务器(因此需要另一台主机或端口)的自己,并听取WS协议请求那里。 这是例如用于SuperWebSocket,这似乎在首好听的话,但是有这个“我是一个web服务器”的问题(这是完全正常的,当然,但我宁愿避免)。

在Windows Server 8将本地支持WebSockets的。 在那之前,你需要使用一个单独的Web服务器“,如XSockets或SuperWebSockets(你已经提到)。 还有炼金的WebSockets和斑点 。

但由于微软正在推动SignalR转发它是最有可能得到充分的牵引力,甚至成为标准的ASP.NET MVC堆栈的一部分(它可能已经被计划的,我有点与MS的东西落伍)。 SignalR具有WebSocket的支持(或有一个模块),并将处理回退传输支持用户浏览器的机制。

有关自托管解决方案的更多信息(有几个.NET / IIS选项),看看这些自托管的实时服务 。

我在看到成千上万的持久连接的问题时如何IIS秤很感兴趣 - 已将它为Windows Server 8重写? 多久,直到你需要引入负载平衡器和水平尺度? 如果这是不是你有兴趣的担心,然后就看着一个我主持的实时服务 。



文章来源: So… ASP.NET MVC and WebSockets?