服务端主动推送消息Server-client events(SSE)
前言
众所周知,用http可以实现从客户端请求服务端的消息,用websocket可以实现客户端和服务器的双向通信,但用SSE实现服务端主动推送的比较少。
SSE相当于http的优点是可以由服务端主动推送消息。SSE相当于websocket的优点是断开连接后可以自动重连。
使用场景
- 消息统一推送
- 数据实时更新
- 代替轮询
使用方法
node的话,可以用阮老师的例子node实现SSE
python可以参考下面的代码
1 | from flask import Flask, Response |
传递post参数
默认情况下,sse
只能进行get
请求,参数跟在url后面。借助@microsoft/fetch-event-source
可以传递post参数。
1 | fetchEventSource('/api/sse', { |
注意事项
- 想要跨域需要设置
withCredentials: true
或服务端设置允许跨域。(@microsoft/fetch-event-source
可以不用设置) - 接口必须设置
mimetype
为text/event-stream
- 接口返回的每条消息必须以
\n
结尾,最后一条消息以\n\n
结尾 - 有连接个数限制,每个域名下好像是限制6个
- 如果想测试自动重连,可以先关闭服务端的服务再打开
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 河豚的前端之路!
评论