如果我想创建一个AJAX聊天,应该使用哪种通信技术来保持可扩展性?

时间:2011-10-17 20:36:00

标签: javascript jquery ajax client-server push

我将ASP.NET MVC和jQuery的AJAX聊天放在一起。 javascript会每隔7秒左右点击一次服务器来检查新消息。显然,随着聊天的增长和包含越来越多的用户,这在性能上非常糟糕。随着许多请求的继续,网站流量呈指数级增长。用户可以整天离开计算机,甚至不在那里,他们仍然会每7秒点击一次。

有更好的方法吗?我听说过一种叫做“推”的东西,但我真的无法绕过它。我想我只需指出正确的方向。

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

2。)什么是推送,我将如何使用jQuery?

4 个答案:

答案 0 :(得分:1)

Server push是一种技术,允许服务器将数据推送回客户端,而不会强制客户端发出许多请求(例如每7秒)。这不是javascript的问题,而是良好的服务器脚本。即将推出的HTML5会因server-sent events和/或WebSockets而变得简单。这将是不同机器之间真正的TCP连接。

但是,如果您打算使网页与旧浏览器兼容,那么最常见的技术是长轮询。客户端向服务器发送请求,服务器在有新数据之前不响应它。如果确实如此,则在接收数据后立即做出响应并且客户端立即通过新请求调用服务器。但实际上,这需要服务器编写良好(例如,它必须同时维护数千个空闲请求),并且对开发人员来说可能成为一个相当大的挑战。

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

答案 1 :(得分:1)

  

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

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

然而,在名为SignalR的作品中有一个相对较新的Microsoft选项,它可能成为ASP.NET的核心部分。有关SO问题的详细信息:

  

2。)什么是推送,我将如何使用jQuery?

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

jQuery确实支持发出AJAX请求,但核心库不支持公开进行HTTP长轮询或HTTP流式传输的方式。有关此SO answer to 'Long Polling/HTTP Streaming General Questions'

的更多信息

答案 2 :(得分:1)

您应该使用的技术是使用WebSockets在网页上实时持久运行长连接。您可以使用此library

答案 3 :(得分:0)

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

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

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