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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Seebug漏洞平台

Discuz!X 3.4 任意文件删除漏洞分析

作者:LoRexxar'@知道创宇404实验室 日期:2017年9月30日 0x01 简 述 Discuz!X 社区软件,是一个采用 PHP 和 MySQL...

3528
来自专栏数据和云

如何优雅地添加MGR节点?

MySQL Group Replication(简称MGR)是MySQL官方于2016年12月份推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高...

4579
来自专栏小狼的世界

HP-UX培训学习笔记

HP-UX操作系统全称为Hewlett Packard UniX,是惠普服务器上所有的操作系统。其发源自 AT & T SRV4系统,可以支持HP的PA-RIS...

1432
来自专栏Android's Track

当我们按下电源键,Android 究竟做了些什么?

我们会否好奇过,如此复杂的 Android 究竟是怎么运作起来的呢?

1.3K14
来自专栏运维

vSphere初体验之添加主机

物理机:DELL  IPTIPLEX 990 PC机 I52400处理器支持VT功能  8G内存 千兆网卡

1892
来自专栏nnngu

看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)

最近有同学问我有没有做过在线咨询功能。同时,公司也刚好让我接手一个 IM 项目。所以今天抽时间记录一下最近学习的内容。本文主要剖析了 WebSocket 的原理...

1462
来自专栏雨过天晴

转 树莓派无显示器安装系统

1652
来自专栏编程

年底总结一下Python WEB最好用的几个框架,让你有一个系统的了解

2017年就要过完了,我们来总结一下2017年最好用的17个Python Web框架 群内不定时分享干货,包括2017最新的python企业案例学习资料和零基础...

8248
来自专栏Java技术分享

Shard 分片集群

要构建一个 MongoDB Sharding Cluster,需要三种角色:

2395
来自专栏吴伟祥

Druid总结 原

https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

1592

扫码关注云+社区

领取腾讯云代金券