如果我想创建一个AJAX聊天,应该使用什么通信技术来保持可伸缩性



我把一个AJAX聊天一段时间后ASP。NET MVC和jQuery。javascript大约每7秒访问一次服务器以检查新消息。显然,随着聊天的增长和用户的增加,这对性能的影响非常糟糕。由于有如此多的请求,网站流量呈指数级增长。一个用户可以让电脑开着一整天,甚至不在那里,他们仍然可以每7秒点击一次。

有更好的方法吗?我听说过一个叫"推"的东西,但我真的不能理解它。我想我只是需要一个正确的方向。

1)。开发AJAX聊天并使其具有可扩展性的最佳方法是什么?

2)。什么是push,如何使用jQuery实现它?

1)。开发AJAX聊天并使其具有可扩展性的最佳方法是什么?

我同意@freakish关于IIS的复杂性和潜在的缺乏可扩展性的看法。

然而,在工作中有一个相对较新的Microsoft选项SignalR,它可能成为ASP.NET的核心部分。这个相关SO的更多细节问题:

  • AJAX Comet -微软是否正在开发或支持任何解决方案来允许它可扩展?

2)。什么是push,如何使用jQuery实现它?

在其他地方部分回答,但它是服务器和客户端之间长期保持的持久连接,这意味着服务器可以在有新数据可用时立即将数据"推送"到客户端。

jQuery确实支持AJAX请求,但核心库不支持HTTP长轮询或HTTP流的公开方式。关于"长轮询/HTTP流一般问题"的更多信息。

服务器推送是一种允许服务器将数据推送回客户端的技术,而无需强制客户端发出许多请求(例如每7秒一次)。这不是javascript的问题,而是好的服务器脚本。由于服务器发送事件和/或WebSockets,即将到来的HTML5将使它变得简单。这将是不同机器之间真正的TCP连接。

但是如果你想让一个网页兼容旧的浏览器,那么最常用的技术是长轮询。客户端向服务器发送请求,服务器在获得新数据之前不响应它。如果是,则做出响应,客户机在接收到数据后立即用新的请求调用服务器。然而,在实践中,这需要服务器编写得很好(例如,它必须同时维护数千个空闲请求),并且可能成为开发人员的一个相当大的挑战。

我希望这对你有帮助。祝你好运!

您应该使用的技术是使用WebSockets在网页上实时持久长时间运行的连接。你可以使用这个库

Node.js在构建这样的东西方面变得非常流行,它支持套接字连接,因此只有在有新消息时才可以将数据推出。但那将是学习一些全新的东西。

另一个很好的潜力是使用MVC的OutputCacheAttribute并使用SQL依赖项选项,这样您的AJAX页面可以被缓存,并且只有在出现新的聊天消息时才会成为新请求。此外,您可能希望您的控制器是异步控制器,以帮助减少IIS上的负载。

享受,优化总是有趣的,非常耗时!

最新更新