专栏首页性能与架构Web实时通讯方案 - SockJS

Web实时通讯方案 - SockJS

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

本文分享自微信公众号 - 性能与架构(yogoup),作者:杜亦舒

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-04-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker容器案例:应用 Mysql

    前阶段体验 Mysql 的新版本 5.7.13,由于机器里已经有 Mysql了,再安装另一个版本会有一些麻烦,为了简单,便使用 Docker 容器来安装 可能有...

    dys
  • 高性能负载均衡软件HAProxy

    image.png HAProxy是一个负载均衡软件,开源、高性能,可应用于TCP(第四层)和HTTP(第七层) 借助HAProxy可以快速、可靠地提供基于TC...

    dys
  • Node.js 6.0 已经支持 93% 的ES6

    Node.js 6.0 发布了,带来了性能的大幅提升、更好的测试、更完善的文档、更好的安全性,并广泛支持了ES6 在 Node.js 5.0 发布了6个月以后,...

    dys
  • 理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性

    WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要...

    JackJiang
  • 一口价!组合域名51work.cn8万元被秒

    近段时间域名圈传来的交易消息未曾停过,这不一枚“51”开头的组合域名51work.cn以一口价80000元被秒,这个价格真是诱惑人啊!

    躲在树上的域小名
  • 腾讯云 Elasticsearch 进阶篇(二十九)Logstash讲解与实战

    output是Logstash的最后阶段,一个事件可以经过多个输出,而一旦所有输出处理完成,整个事件就执行完成。 一些常用的输出包括:

    南非骆驼漫谈ELK Stack
  • Python原创0基础入门一看几张图就学会了

    Python最近势头很猛,由于他在人工智能方面的出色表现,已经成为现在热门的编程语音之一,为了大家方便学习,而不是浪费时间去看入门教程,萌掌用图片的方式画出了你...

    企鹅号小编
  • Android绘制优化(一)绘制性能分析

    前言 一个优秀的应用不仅仅是要有吸引人的功能和交互,同时在性能上也有很高的要求。运行Android系统的手机,虽然配置在不断的提升,但仍旧无法和PC相比,无法做...

    用户1269200
  • 温度采集系统上位机设计

    上一次我们讲到了多点温度采集系统的设计,为此,特意开发了一个上位机用于显示温度,这一节就是来说一下上位机的开发。

    飞哥
  • 研究人员称量子计算并非深度学习最佳工具

    2015年11月11日,互联网产业资讯网站(VenTureBeat)发文指出量子计算机并不适合深度学习。在过去的几年中,谷歌公司一直在努力改善其人工智能服务,谷...

    人工智能快报

扫码关注云+社区

领取腾讯云代金券