最近在看服务器推技术时,发现了一项新的技术:EventSource。
w3c上有个草案描述了它:Server-Send Events。
回想一下我们之前用到的服务器推技术:
polling
:客户端不断轮询。long polling
:服务端在数据未就绪时,挂起请求。
这两种技术都存在一定的局限,我们需要服务器主动推送数据。
于是有了WebSocket
,但它是双向的(服务端<——>客户端)。
有的时候,我们并不需要从客户端发送消息,我们只需要从服务端推送消息,EventSource
应运而生。
EventSource
是单向的(服务端——>客户端),它直接使用http协议来传输数据(与WebSocket
不同,EventSource
不需要专门的协议)。
客户端, client.html:
1 | if (window.EventSource) { |
服务端, server.js:
1 | var http = require('http'); |
EventSource
的content-type
是text/event-stream
,数据传输格式:
1 | data: xxxxxxx\n\n |
多行的数据:
1 | data: xxxxxxxx\n |
最后一行使用两个\n
。
我们可以使用EventSource
传输json格式数据:
1 | data: {\n |
客户端接收到数据后,可以调用JSON.parse
解析出json数据。