php-客户端从服务器检索聊天消息的最佳方法?
作者:互联网
我正在使用JavaScript,jQuery,MySQL和PHP构建聊天应用程序,而我只是想知道客户端从服务器检索聊天消息的最佳方法是什么?我目前的潜在候选人是轮询,长轮询,HTML5服务器发送的事件(EventSource)和WebSockets.其中哪一个是最快的(即时消息)和最有效的方法(请解释为什么也可能)?或者,如果有更好的方法,请在答案中进行详细说明.
另外,我也查看了Node.js Socket.IO,但是我发现的文档和示例代码对我来说并没有什么意义.
最后,我将XAMPP用作本地服务器并将MySQL用作此应用程序的数据库.
任何帮助,将不胜感激.
解决方法:
巧合的是,您列出的选项是按效率从高到低的顺序列出的.
轮询效率最低.它将轮询是否有消息,并在其他客户端发送和接收的消息之间引入延迟.
长时间轮询比较好;那么您可以在发送邮件时收到该邮件,但是重新连接可能会稍有延迟.在此延迟期间,将不会传递消息,但是实际上它是瞬时的.
COMET(未提及)比长轮询更好,但比服务器发送事件差.由于大多数Web服务器和浏览器的连接都有超时,因此它有时也必须重新连接,但是每当发送消息时都不需要重新建立连接.像长时间轮询一样,重新连接时可能会有延迟,但是否则通常是瞬时的.
服务器发送的事件与COMET类似,但是不进行填充时,它具有浏览器的本机支持,因此它可以绕过超时限制,并且只需要在其生命周期内建立一个连接(只要连接没有断开即可). .另一个好处是,如果断开连接而无需您执行任何客户端代码,它将自动重新连接.这是瞬时的.
到目前为止,WebSocket是所有这些选项中最好的.它只需要一个连接,并且是双工的:不仅可以通过它接收消息,而且还可以通过它发送消息,而不必每次要发送消息时都单独连接到服务器.与服务器发送事件不同,它确实需要更多代码:如果连接断开并且服务器端实现通常更为复杂,它不会自动重新连接.我也不确定您是否可以将其与Apache / XAMPP一起使用.这是瞬时的.
Socket.io是一个支持(几乎是?)所有这些以及更多(例如,Flash套接字)的库,并将其抽象到一个不错的API之后,因此您不必处理浏览器对它们的支持的特殊性. .它与选择使用的传输方式一样快,这取决于它所运行的浏览器.它还可以减少您必须编写的代码量.但是,如果对您来说太复杂了,而您又不关心较旧的浏览器,那么就没有必要了.此外,它真的很喜欢独立运行.您也许可以让XAMPP代理它,但是同样,我不知道是否可以将Apache配置为将WebSocket转发给它.
标签:server-sent-events,websocket,javascript,php,jquery 来源: https://codeday.me/bug/20191031/1972602.html