EventSource传输协议
最近开发项目中, 有个需求是 客户端发送指令给服务端, 服务端接收指令,进行解析,解析完成才进行返回, 由于不是实时返回,当时考虑的两种技术方案 1 运用定时器 进行轮询请求刷新, 2 应用WebSocket, 考虑 轮询请求有点占用资源, 运用WebSocket有点没必要. 然后找到了一个HTML5 的API EventSource 下面简单来介绍一下这个API吧
EventSource是一个HTML5 API,它允许服务器向客户端发送事件流(Server-Sent Events),从而实现实时通信。与WebSocket相比,EventSource更加简单易用,并且适合于一对多的消息传递场景。
EventSource 基于HTTP长轮询(HTTP Long Poling) 技术实现,它通过一个持久连接,,不断接收服务器发送的事件流。服务器会保持连接打开,直到有新的事件发送给客户端。与WebSocket的不同点在于,EventSource 只能从服务端接收数据,客户端无法主动发送消息给服务器,这使得它更适用于需要服务器推送数据的场景。
下面进行一个简单的示例 展示如何使用EventSource接收服务器时间流:
下述用node创建一个服务 进行推送
客户端进行接收
效果图如下 已进行推送
EventSource 与 WebSocket的对比
优势
1. 简单性:相对比WebSocket,EventSource 的API更加简单易用。
2. 适合单向通信:EventSource主要是用于服务器推送数据给客户端,适用于一方发送消息,一方接收的场景。
3. 兼容性:EventSource是基于HTTP协议的标准化机制,可以在大多数浏览器进行使用,WebSocket需要浏览器和服务器的支持
应用场景的区分
WebSocket 更适用于双向通信,实时性要求较高的场景,如多人聊天,协同编辑等。由于WebSocket支持全双工通信,客户端和服务端都能随时发送消息给对方,实现更紧密的实时活动
EventSource则适用于服务器向客户端推送数据的场景,如实时更新股票行情,推送系统通知,它基于HTTP协议的长轮询机制,适用于一方发送消息,一方只接收的情况。
标签:协议,场景,WebSocket,EventSource,服务器,推送,客户端 From: https://blog.51cto.com/u_16264321/7479394