使用 PHP 和 SSE 实现异步双向连接聊天应用程序
什么是异步/双向连接🙄?
科技 😎
总结👍
昨天,我创建了一个简单的、没什么实际用途的聊天应用程序,用来研究 PHP 的异步双向连接。
你可以在这里使用它,并在这里获取源代码(我不太明白公开服务器端脚本意味着什么。我想给初学者展示一个使用 SSE 的例子,并且相信它没有漏洞,也不会有人恶意利用它:))
一开始,我想学习 WebRTC 并编写代码,但由于共享服务器的严格限制,代码无法运行。于是,我尝试了一些其他技术,发现SSE可以正常工作。
什么是异步/双向连接🙄?
通常情况下,上网时使用的是同步的服务器到客户端连接。这篇文章详细解释了这种连接方式,它被称为HTTP。
与此相反,异步连接允许您在无需任何操作的情况下与服务器通信。
双向连接允许服务器无需您采取任何操作即可与您通信。
当您想要创建数据传输量较小的实时 Web 应用程序时,需要这些特殊连接。
科技 😎
有多种技术可以支持异步/双向连接。
当您想创建一个聊天应用时,您会使用什么技术?WebSocket 协议(服务器和客户端之间的双向异步连接)、WebRTC 或基本的客户端-服务器-数据库架构都是常见的实现方式。我测试过 WebRTC 和 WebSocket 协议,但由于服务器的硬性限制,这些方法在这个服务器上无法正常工作。
我们来稍微检查一下。
阿贾克斯😋
与 JavaScript 建立异步连接。
WebRTC 🤩
这是一组用于实现P2P 连接(客户端<->客户端,异步)的规范。在 PHP 中,有一些很棒的库可以轻松实现这一点:
WebSocket 📰
WebSocket 协议是一种用于进行异步双向连接的协议。
彗星💫
这是一个允许服务器与客户端异步通信的技巧,它基于HTTP协议。关键在于避免长时间延迟响应。
首先,客户端向服务器发送请求。虽然通常服务器会立即响应,但这次服务器会暂时不响应。然后,当服务器有信息(事件)需要告知客户端时,就会使用之前暂缓的响应。客户端收到响应后,会再次发送请求以处理下一个事件。真是个好主意!
然而,Comet也存在一些问题。例如,如果在前一个事件传输过程中发生下一个事件会怎样?这会导致延迟。
SSE 😲
SSE(服务器发送事件)是另一种通过HTTP实现异步服务器到客户端连接的技术。它可能并不广为人知,但其规范非常简单,也很容易实现。
这是 Comet 协议的升级版。首先,客户端向服务器发送请求,服务器暂时不响应。当事件发生时,服务器会以数据块的形式发送响应,因此连接不会断开。
总结👍
我使用了SSE,它运行正常。现在,即使在共享服务器上,我也可以使用异步双向连接了!
虽然SSE并不完善,但我认为它是WebSocket的一个不错的替代方案,应该得到更广泛的应用。
为了方便实现,我建议您阅读一下这份非常简单的规范文档和一些优秀的博客文章。您也可以参考我的代码。
谢谢。
文章来源:https://dev.to/creativegp1/asynchronous-bi Direction-connected-chat-app-with-sse-in-php-3o25