首页 文章

HTML5服务器端事件:EventSource与包装的WebSocket

提问于
浏览
3

HTML5服务器发送事件(SSE)API是否仅仅是基于事件的受限API,位于HTML5 WebSockets之上?

在我看来, EventSource 只是一个 WebSocket

  • 不能 .send() 数据

  • 使用 text/event-stream 格式

  • 触发动态命名(服务器定义)事件而不是 onmessage

Web服务器将事件推送到客户端设备的想法非常有趣 . 这个API有牵引力吗?

我想,异步事件模型在与Node结合时会很漂亮,但在我的ASP.NET世界中没有看到很多用例 .

2 回答

  • 7

    服务器发送事件在仅需要服务器推送的应用程序中非常有用,而Web套接字适用于需要双向快速通信的应用程序 .

    服务器发送事件是一个很好的解决方案的示例是:

    • 股票 Value 变动

    • 新闻提要

    Server Sent Events执行Web Sockets中未内置的更多操作,例如自动重新连接和eventID .

    截至目前,Server Sent事件还具有更广泛的Web浏览器支持,支持Safari(仅支持较旧的Web Sockets草稿)和Opera(默认情况下禁用Web套接字,并使用较旧的草稿) .

    Stream Updates with Server-Sent Events上阅读有关服务器已发送事件的更多信息 .

  • 5

    除了乔纳斯所说的,协议完全不同 .

    • The WebSocket Protocol (RFC 6455)作为HTTP连接启动,然后使用握手升级与新协议的连接 . 这是一种使用框架,消息类型等的二进制协议 .

    • Server-Sent Events 是一个长时间运行的HTTP请求,保持打开状态 . 服务器以简单的基于文本的格式( UTF-8 编码)发送消息,由 \n\n 分隔 . 消息包含字段 event (事件类型), dataid ,并且可以选择包含注释 .

    一个主要区别是安全模型 . 使用WebSockets,默认设置是让任何人连接 . 必须在服务器端根据 Origin 标头拒绝连接 .

    另一方面,SSE更接近HTTP并使用同源策略 . 默认情况下,您只能向同一主机和端口发出请求 . 将来可以使用CORS进行跨域SSE请求 . 截至今天,浏览器尚未实现此功能 .

    这两种协议采用不同的方法,因为它们解决了不同的问题 .

相关问题