用js写在线聊天最好的方式是什么?如果我使用AJAX,每5秒更新一次关于用户和消息的信息- HTTP请求和回答会造成很大的流量,而请求会造成很高的服务器负载。
但另一种情况又如何呢?套接字?但是如何..。
发布于 2010-12-07 04:40:17
您似乎在服务器负载方面有问题,所以我将比较相关的技术。
Ajax polling:这是最简单的。您每隔5秒左右执行一次setTimeout循环,以检查新的聊天消息,或者设置一个重新加载的iframe。当你发布一条消息时,你也会返回新的消息,并且事情不应该变得混乱。这种方法最大的缺点是,您不太可能以与发布消息的频率相对应的频率进行轮询。要么你会轮询太快,你会发出很多额外的请求,要么你会轮询太慢,你会一次得到大量消息,而不是以实时的方式获得它们。不过,这是目前为止最简单的方法。
HTTP Push这个想法是,服务器应该在有新消息时告诉客户端,而不是客户端不断地骚扰服务器,询问是否有新的消息。想象一下,父母开车,孩子问“我们到了吗?”,你可以让父母告诉孩子他们到了那里。
有几种方法既可以假装这一点,也可以真正做到这一点。您提到的WebSockets实际上是在客户端和服务器之间创建流,并实时发送数据。这太棒了,对于10个拥有浏览器的用户中的4个来说,他们将会非常兴奋。其他人都会有一个破碎的页面。抱歉的。也许再过几年。
你也可以用long-polling之类的东西来伪造推送技术。其想法是,您询问服务器是否有新消息,服务器在出现新消息或达到某个预设限制(30秒左右)之前不会回答。这使得请求的数量最少,同时使用已知的web技术,因此大多数浏览器都可以使用它。你会有一个高并发的连接,但是他们真的什么也没做,所以它的服务器开销应该太高了。
我以前用过所有这些,但最终我自己使用了long polling。您可以在此处找到有关实际操作的更多信息:How do I implement basic "Long Polling"?
发布于 2013-06-16 06:46:49
您应该选择套接字而不是AJAX轮询,但是关于如何将基于套接字的聊天与MySQL集成的内容并不多。
我已经做了一些测试,并且这里有一个基本的例子:https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat
它使用Ratchet (http://socketo.me/)在PHP语言中创建聊天服务器。
您可以通过向服务器JSON发送聊天消息到数据库(当然,如果您有用户会话的话)。
发布于 2010-12-07 04:24:20
有几种方法可以将消息立即发送给客户端:
<script>标签向客户端发送命令脚本会立即执行
所以,总而言之,我会选择第二种方式。
https://stackoverflow.com/questions/4370591
复制相似问题