前端开发中,实时应用程序是非常常见的需求。实时应用程序是指需要实时显示数据的应用程序,如在线聊天、股票行情等。为了实现实时显示数据,需要通过不断地向服务器发送请求来更新数据,这会给服务器带来很大的压力。为了解决这个问题,出现了两种解决方案:Server-sent Events 和 Server Push。
Server-sent Events
Server-sent Events(服务器发送事件)是 HTML5 规范中的一种实时通信方式,用于在客户端和服务器之间实现一种单向的持续连接。使用 Server-sent Events,服务器可以向客户端推送事件,并且客户端可以通过绑定监听器的方式监听这些事件。相比于传统的轮询方式,Server-sent Events 可以降低服务器的压力,提高应用程序的性能。
以下是一个 Server-sent Events 的示例代码:
-- -------------------- ---- ------- --------- ----- ------ ------ ------------------ -------------- ----- ---------------- ------- ------ ---- -------------------- -------- --- -------- - ------------------------------------ --- ----------- - --- -------------------------- --------------------- - --------------- - ------------------ -- ---------- - ------- -- --------- ------- -------展开代码
在这个示例中,使用了 EventSource 对象来连接一个被称为 server.php 的服务器脚本,服务器将向客户端发送事件,客户端通过监听事件来获取服务器发送的数据。
Server Push
Server Push 是一种新兴的技术,最开始是由 HTTP/2 协议提出的,它可以让服务器像客户端推送数据,而无需客户端发起请求。这种方式可以极大地提高应用程序的性能,因为服务器可以在客户端需要数据之前就将数据推送给客户端。但是,由于目前只有最新的浏览器支持 HTTP/2,因此 Server Push 的适用范围相对较窄。
以下是一个使用 Server Push 的示例代码:
-- -------------------- ---- ------- --------- ----- ------ ------ ------------- ------------ ----- ---------------- ----- ---------------- ----------------- ------- ----------------------- ----- ------------- ---------------- ---------- ------------ -------- -- -------------- -- ------- - --------------------------------------------------------------------- - ------------------------------------ ---------------- ----- --------------------- ------------------------------------------------- ------------------------------ - ----------------- -- -------------- ------------------------ - --------------------- -- --------- --- ----- -- ------- --- ------------------------ - ---------------------- ------ ------------ ------- -- ------- --- - --------- ------- ------ ----------- -- ------ --------- ---- -------------------- ------- -------展开代码
在这个示例中,使用了 Service Worker 和 Push API 实现了 Server Push,客户端可以从服务器接收到推送的消息。但是需要注意的是,需要在客户端进行 Service Worker 的注册和推送消息的订阅等操作,因此实现 Server Push 的代码比较复杂。
哪一个更适合实时应用程序?
Server-sent Events 和 Server Push 都是实现实时应用程序的好方法,但是哪一个更适合在实际开发中使用呢?需要根据具体的情况来考虑。
如果应用程序需要支持的浏览器比较多,并且需要支持 IE11 及以下的浏览器,那么应该使用 Server-sent Events,因为 Server-sent Events 可以在所有浏览器上运行。
如果应用程序只需要支持比较新的浏览器,并且希望提高性能,那么应该使用 Server Push,因为 Server Push 可以让服务器在客户端需要数据之前就将数据推送给客户端,从而提高应用程序的性能。
综上所述,根据具体情况选择合适的实时通信方式是非常重要的。需要根据浏览器支持情况、应用程序的性能需求等方面来考虑选择哪种通信方式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b82712306f20b3a65b1112