前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web实时通讯方案 - SockJS

Web实时通讯方案 - SockJS

作者头像
dys
发布2018-04-03 17:09:39
2.5K0
发布2018-04-03 17:09:39
举报
文章被收录于专栏:性能与架构性能与架构

HTML5有了websocket,让我们可以方便开发实时通信程序,但websocket还很年轻,目前还是需要一个更加成熟的实时通讯方案 SockJS 就是一个非常好的选择,SockJS已经为很多实时web框架提供了底层服务 SockJS 是一个JavaScript库,提供了一个类似WebSocket的对象,用来创建低延时、全双工、跨域通讯服务,拥有一致的、跨浏览器的API,SockJS集成了WebSocket和其他通信方式,形成一套稳定的实时通讯服务方案

SockJS的特点

浏览器端和服务器端的API都非常简洁,尽可能的靠近WebSocket API 有很强的扩展能力,支持负载均衡 全面支持跨域通信 支持丰富的传输方式,在某种方式受阻的情况下,智能切换其他方式 建立连接非常快 不使用Flash,纯Javascript 服务器端的代码简单,方便使用不同语言开发服务端代码

SockJS的核心

SockJS提供了WebSocket一样的实时通信功能,看似比较简单,但他最牛的地方在于兼容性,能够在各种环境下提供服务 因为在真实场景中,网络环境非常复杂 首先,浏览器对WebSocket的兼容还不够完备 并且,浏览器和server之间可能会有很多中间节点,如路由器、代理服务器、负载均衡器……,这些中间节点可能会阻止WebSocket的连接 SockJS的核心是具有健壮的传输协议 不仅提供了原生WebSocket协议的支持,还提供了流传输Streaming和轮询Polling 其中又包括多种底层传输方案,如: xhr、xhr_streaming、jsonp、eventsource、htmlfile 如果客户端采用websocket连接不上服务器,它可以回退选择其他传输方案,确保总是可以利用一种传输协议,连接到服务器

负载均衡

单个SockJS server的能力总是有限的,SockJS也提供了扩展思路 最简单的就是使用多域名 例如 sockjs1.example.com 和 sockjs2.example.com,让客户端进行随机选择 也可以使用支持WebSocket的负载均衡器,如 HAProxy 对于不支持WebSocket的负载均衡器,建议在客户端和服务器端都禁用掉WebSocket,这样可以缩短通信建立的时间 这种情况需要负载均衡器配置为sticky sessions 方式,让相同SockJS session的请求都转到同一个SockJS server

SockJS资源

client端实现:sockjs-client server端的实现有很多,如 node、erlang、python、java …… 项目地址 https://github.com/sockjs/sockjs-client 参考资料 https://github.com/sockjs/sockjs-client/wiki/[Article]-SockJS:-WebSocket-emulation-done-right

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档