服务器推送消息的方式有几种
一般情况下,在bs架构系统中,服务器想要向客户端推送消息,主要有以下几种方式:
短轮查询:客户端定期向服务器请求数据,服务器立即返回响应信息。长轮查询:客户端要求服务器数据,服务器保持连接,返回响应信息并关闭连接,直到有新消息。流量信息:客户端向服务器要求数据,服务器声明将数据流发送到客户端。WebSocket:客户端与服务器建立双向通信连接,可以相互发送和接收数据。
实现这些推送信息的原则的区别如下:
短轮询价:不需要特殊的技术支持,只需在客户端和服务器之间进行HTTP请求和响应即可。长轮询问:不需要特殊的技术支持,客户端和服务器只需要HTTP请求和响应,但服务器应能够保持连接并及时返回新消息。流量信息:客户端需要支持EventSource接口,服务器需要发送Content-Type:text/event-stream的响应,并遵循一定的格式规范。WebSocket:客户端需要支持Websocket接口,服务器需要升级HTTP连接到Websocket连接,并实现Websocket协议。
因此,这些方法各有优缺点:
短轮查询:优点是实现简单,不需要特殊技术支持;缺点是效率低,资源浪费,信息无法实时推送。长轮查询:优点是可以实时推送消息,减少无效要求;缺点是服务器压力大,需要保持连接,及时返回新消息。流信息:优点是可以实时推送信息,节约资源,避免轮询缺陷;缺点是只能单向通信,客户端需要支持EventSource接口。WebSocket:优点是实现双向通信,效率高,节约资源;缺点是客户端和服务器需要支持Websocket接口和协议。
这些方法适用于以下场景:
短轮查询:适用于数据更新频率低、实时要求低的场景,如新闻、博客等。长轮查询:适用于数据更新频率高、实时要求高的场景,如聊天、通知等。流量信息:适用于数据更新频率高、实时要求高的场景,只需单向通信,如股票市场、在线直播等。WebSocket:适用于数据更新频率高、实时要求高、需要双向通信的场景,如在线游戏、视频会议等。
用deno实现Server-sentevents接口
在了解了上述前置信息后,回到本文想要讨论的主题。
我们知道,Server-sentevents是一种通过HTTP实现web前端应用的服务器端推送规范,属于上述流信息。
那我们怎样才能用deno实现Server-sentevents接口呢?
也许有些不懂童鞋要问,什么是deno?
在deno中,我们必须了解如何使用标准库实现httpserver。
实现最简单的方法,如下面的例子所示:
实现流模式的响应
在deno的官方示例中,有一个示例显示如何发送流数据。
结合Server-sentevents的要求,
我们可以改造这个例子,改造后的代码如下:
在我们的前端页面中,接口可以通过以下方式直接调用:
文章为作者独立观点,不代表股票交易接口观点