0

好的,我正在开发类似聊天环境的东西,如果不是实时对话,我希望进行近乎实时的对话。但我知道浏览器一次只会为每个域的事务放弃 2 个线程。所以我试图找出一种在不真正影响浏览器的情况下进行同步聊天的方法。我也知道浏览器倾向于锁定同步请求。

那么从头开始在站点上创建类似聊天的环境的最佳方法是什么,假设数据库和脚本概念很好,它是连接管理,想知道如何保持不会阻塞浏览器并导致它可能会冻结。

任何人都有任何想法。我不是在寻找基于 Flash 或 java 的解决方案。我也不想每秒轮询一次。但是什么是栈印象,你会怎么做。

4

2 回答 2

2

首先,规范只建议允许两个连接。大多数现代浏览器实际上最多支持 6 个。

使用纯 Javascript 创建聊天系统的主要接受方法有以下三种:

轮询

第一个解决方案很简单,只需每隔几秒轮询一次服务器(5 是一个不错的数字)以查看遗漏的内容。它工作简单高效,但如果不小心可能会导致大量不必要的请求,从而导致不必要的服务器负载。

一个更好的实现是通过轮询来简单地检查自上次聊天更新以来是否发生了任何事情,如果是,那么只有通过找出发生了什么的过程。节省服务器负载和带宽方面。

等待

这种方法更常用,它涉及浏览器向服务器发送一个从未完成的请求,而是一直“等待响应”。当事情发生时,服务器输出它并满足请求,客户端发出另一个请求并重复该过程。这样可以节省请求方面的费用,但最终可能会导致服务器上正在进行的进程积压。

网络套接字

https://developer.mozilla.org/en/WebSockets

这涉及到创建到服务器的直接套接字连接,允许在需要时将数据推送到客户端。虽然它相对较新,并且可能存在一些兼容性问题,尤其是对于旧浏览器。

其中,没有一个是专门的“最佳方法”;这取决于你的目标是什么,以及什么是重要的。如果你有一个为最新浏览器设计的网站,那么 websockets 可能是你的答案,但如果你有一个小型服务器,那么例如轮询可能会更好。

于 2012-06-06T01:37:34.473 回答
0

我自己的聊天引擎每五秒钟检查一次新消息。这已经足够接近即时了,没有人知道其中的区别。

就像setInterval(updateChat,5000);.

于 2012-06-06T01:35:51.730 回答