EventSource AND websocket,navigator.sendBeacon
WebSocket
需要服务器做特殊的支持
是真正双向的长连接
可以将数据作为字符串、 Blob 或者 ArrayBuffer 来发送
EventSource // 很鸡肋啊
事件流仅仅是一个简单的文本数据流,且是单向通道,默认断线重连,支持自定义(事件)发送的数据类型
文本应该使用UTF- 8格式的编码.每条消息后面都由一个空行作为分隔符.以冒号开头的行为注释行,会被忽略.
注释行可以用来防止连接超时,服务器可以定期发送一条消息注释行,以保持连接不断.
服务器可以与浏览器约定自定义事件。这种情况下,发送回来的数据不会触发message事件,客户端用addEventListener监听EventSource对象
服务器响应内容应该使用值为"text/event-stream"的MIME类型(响应头Content-Type字段)
服务器发送消息格式field: value\n,field可以是"data", "event", "id", or "retry"
data数据行最后一行用\n\n
浏览器用lastEventId属性读取ID值,一旦连接断线,浏览器会发送一个HTTP头,里面包含一个特殊的"Last-Event-ID"头信息,将这个值发送回来,用来帮助服务器端重建连接
浏览器默认的是,如果服务器端三秒内没有发送任何信息,则开始重连,服务器端可以用retry头信息,指定通信的最大间隔时间。
navigator.sendBeacon(POST)异步从用户代理(页面卸载也能发)发送小量HTTP数据到服务器,数据可以是: