首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP + JS + (MySQL?) + (AJAX?)进行快速、轻量级、经济的在线聊天

如何使用PHP + JS + (MySQL?) + (AJAX?)进行快速、轻量级、经济的在线聊天
EN

Stack Overflow用户
提问于 2010-12-07 04:21:28
回答 4查看 4.6K关注 0票数 10

用js写在线聊天最好的方式是什么?如果我使用AJAX,每5秒更新一次关于用户和消息的信息- HTTP请求和回答会造成很大的流量,而请求会造成很高的服务器负载。

但另一种情况又如何呢?套接字?但是如何..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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"?

票数 8
EN

Stack Overflow用户

发布于 2013-06-16 06:46:49

您应该选择套接字而不是AJAX轮询,但是关于如何将基于套接字的聊天与MySQL集成的内容并不多。

我已经做了一些测试,并且这里有一个基本的例子:https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat

它使用Ratchet (http://socketo.me/)在PHP语言中创建聊天服务器。

您可以通过向服务器JSON发送聊天消息到数据库(当然,如果您有用户会话的话)。

票数 2
EN

Stack Overflow用户

发布于 2010-12-07 04:24:20

有几种方法可以将消息立即发送给客户端:

  • HTML5 Websockets
    • 很好,因为您可以像使用真正的套接字一样使用它们
    • 不好,因为只有几个浏览器支持Websockets

  • Endlessly-loading frame
    • 很好,因为每个浏览器都支持它
    • 不太好,因为你必须做AJAX请求才能发送东西
    • 你可以通过在content
      • 中嵌入<script>标签向客户端发送命令脚本会立即执行

  • ...

所以,总而言之,我会选择第二种方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4370591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档