收到新的msg时刷新聊天框

时间:2015-09-14 17:34:31

标签: javascript ajax chat server-push

我是PHP的新手。我将使用PHP(一个聊天框)创建一个简单的Web应用程序。

我不知道在收到新消息后立即刷新聊天窗口的更好方法。我想到的唯一一件事就是频繁刷新页面。我知道这不是一个好主意。

我知道如何使用AJAX,所以我只能刷新聊天框(不刷新整个页面)。但是在AJAX中,客户端也必须发送请求。

收到新的消息后,有没有办法让服务器刷新聊天框?

2 个答案:

答案 0 :(得分:0)

是的,有一种方法可以通过服务器通知客户端。它被称为

WebSocket

使用此技术,您可以随时将数据从服务器发送到客户端,反之亦然。 它会创建一个TCP连接并保持打开状态,直到您手动关闭它。

我之前没有在php中使用它,但是快速谷歌搜索给了我一些库的结果,所以你应该找到一个合适的解决方案。虽然,我认为在其他连续运行服务器上的node.js服务器更适合这种功能。

在客户端,您可以通过JavaScript中的WebSocket进行通信 首先打开连接

var webSocket = new WebSocket("ws://www.example.com/socketserver");

然后您可以等待传入流量并处理函数中的数据

webSocket.onmessage = function (event) {
    console.log(event.data);
}

这只是一个非常简短的概述。您将找到有关此主题的大量信息,例如Mozilla Developer Network

答案 1 :(得分:0)

Web应用程序中的标准通信顺序是HTTP请求由Web客户端(浏览器)启动,然后由服务器响应。

您需要的是角色相反,服务器机器请求客户端计算机接收消息。

这称为server push。链接的维基百科文章列出了许多变通方法。

客户端反复询问服务器是否有新消息到达是最简单的方法,它被称为轮询,但是以高频率完成会给服务器带来压力(若多个客户端这样做会成倍增加)并且频率较低对许多用例没有足够的响应能力。

尽管其他用户emsch使用了大字体,但WebSockets对于每个人来说都不可行(因为并非每个浏览器都支持它)。 比较您的浏览器/ os矩阵,例如与browser implementation

几年前我最喜欢的是BOSH,我更喜欢其他方法,例如Comet:BOSH需要服务器保持连接,以便服务器能够响应并且可能是第二个连接到客户端要响应的服务器。由于可能发生超时,因此在一段时间后以低频率执行空交换。因此,如果没有消息到达服务器或客户端,BOSH就像慢速轮询一样。

如果您不熟悉网络和网络开发,我建议您寻找一个不错的消息库。

  • 如果您需要支持旧浏览器,那么支持上述几种技术的库将回归到最佳适用案例
  • 如果您可以使用现代浏览器,请转到一些基于WebSockets的库。