socket.io介绍
WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯。
而Socket.IO是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js。Socket.IO除了支持WebSocket通讯协议外,还支持许多种轮询(Polling)机制以及其它实时通信方式,并封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。Socket.IO实现的Polling通信机制包括Adobe Flash Socket、AJAX长轮询、AJAX multipart streaming、持久Iframe、JSONP轮询等。Socket.IO能够根据浏览器对通讯机制的支持情况自动地选择最佳的方式来实现网络实时应用。当前,Socket.IO最新版本是于2015年1月19日发布的1.3.0版本,该版本增强了稳定性和提高了性能,并修复了大量Bug。
Socket.IO设计的目标是构建能够在不同浏览器和移动设备上良好运行的实时应用,如实时分析系统、二进制流数据处理应用、在线聊天室、在线客服系统、评论系统、WebIM等。目前,Socket.IO已经支持主流PC浏览器(如IE、Safari、Chrome、Firefox、Opera等)和移动平台上的浏览器(iOS平台下的Safari、Android平台下的基于Webkit的浏览器等)。
Socket.IO已经具有众多强大功能的模块和扩展API,如(session.socket.io)(http session中间件,进行session相关操作)、socket.io-cookie(cookie解析中间件)、session-web-sockets(以安全的方式传递Session)、socket-logger(JSON格式的记录日志工具)、websocket.MQ(可靠的消息队列)、socket.io-mongo(使用MongoDB的适配器)、socket.io-redis(Redis的适配器)、socket.io-parser(服务端和客户端通讯的默认协议实现模块)等。
Socket.IO实现了实时、双向、基于事件的通讯机制,它解决了实时的通信问题,并统一了服务端与客户端的编程方式。启动了Socket以后,就像建立了一条客户端与服务端的管道,两边可以互通有无。
MobileIMSDK-Web介绍
MobileIMSDK-Web是一套纯JS编写的Web端即时通讯框架(含服务端):
超轻量级、极少依赖;
纯JS编写、高度提炼,简单易用;
基于流行的socket.io网络框架实现,浏览器兼容性好、服务端并发性能好;
支持运行于iOS、Android等移动端浏览器和各种PC端浏览器;
能与MobileIMSDK的APP版(原生移动端代码编写)完美互通;
可应用于手机端/PC端的网页聊天应用、企业OA、Web端消息推送等场景。
整套MobileIMSDK-Web框架由以下2部分组成:
浏览器端SDK:
用于开发浏览器端页面,纯JS编写,极少依赖,方便对接基于原生JS、Angular、EmberJS、VUE等各种前端框架;
服务器端SDK:
用于开发Web端IM的服务端,支持高性能和高并发。
MobileIMSDK-Web的设计目标是为您的Web端IM带来以下便利:
前端UI代码与网络通信代码解耦:UI界面的重构、维护、改版都非常容易和优雅;
服务端网络通信代码与业务代码解耦:使得服务端的业务逻辑实现起来清晰简单;
浏览器端的高兼容性:受益于socket.io框架,MobileIMSDK-Web在不支持WebSocket的旧式浏览器上仍可很好地工作;
服务端的高并发、高性能:得益于Nodejs的异步编程模型和高并发特性,基于MobileIMSDK-Web编写的IM服务端拥有极高的并发处理性能。
为何使用的是Socket.io而不是Netty作为MobileIMSDK-Web的网络层
1)如果您的Web端即时通讯系统希望尽可能多地兼容更多浏览器(包括手机端浏览器),则可以考虑使用Socket.io这样的Web端网络层方案(就像MobileIMSDK-Web的选择一样);
2)如果您的Web端即时通讯系统只需要运行在支持HTML5的浏览器上(诸如IE10及以上版本的新式浏览器上)时,您可以选择实现了WebSocket的Netty这样的服务端方案来开发:
以Java语言为例,实际上支持WebSocket的服务端方案不只有Netty这样的NIO框架,包括Tomcat7、Jetty等主流的Java Web容器也有对WebSocket的支持(如果我们不考虑高并发、高负载的话)。
这里不得不提到Netty
Netty 是一个基于 Java NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。
NIO框架的流行,使得开发大并发、高性能的Java互联网服务端成为可能。这其中最流行Java NIO框架的无非就是MINA和Netty了,MINA目前的主要版本是MINA2、而Netty的主要版本是Netty3和Netty4(Netty5已经被取消开发了:详见此文)。
而Netty在最新版本中,已经内置了对WebSocket协议的支持,而WebSocket协议属于HTML5标准的一部分(有关WebSocket的介绍请见《新手快速入门:WebSocket简明教程》),这也就意味着可以基于Netty编写WebSocket的服务端,从而在支持HTML5的浏览器里实现Web端即时通讯。
是的,MobileIMSDK-Web的设计目标就是为了更大程度地在低版本地浏览器上实现Web即时通讯技术,所以选择了Socket.io。而这也就意味着MobileIMSDK-Web可以更广泛地应用于Web即时通讯场景,包括但不限于:Web端客服系统、Web推送系统、Web端OA系统等各种Web端实时通信业务中。
返回 文章论题首页