Websocket 与 Socket.IO、Socket

      最近在开发网络应用项目,使用websocket协议,后端弄好后,昨天前端同事突然跑过来说,你这个是Socket.IO,不是 Websocket!?一脸无奈 —| | |
      我是清楚Socket.IO是基于Websocket协议,但其他就解释不了给他。另也对websocket 与 Socket的关系有疑惑? 开启 G妹 模式 ......

Websocket 为何?

        详见 ----> websocket的那些事 - 初识

Socket.IO是什么?

        支持WebSocket协议、用于实时通信和跨平台的框架。

        Socket.IO除了支持WebSocket通讯协议外,还支持许多种轮询(Polling)机制以及其它实时通信方式,并封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。Socket.IO实现的Polling通信机制包括Adobe Flash Socket、AJAX长轮询、AJAX multipart streaming、持久Iframe、JSONP轮询等。Socket.IO能够根据浏览器对通讯机制的支持情况自动地选择最佳的方式来实现网络实时应用。

         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以后,就像建立了一条客户端与服务端的管道,两边可以互通有无。它还能够和Express.js提供的传统请求方式很好的结合,即可以在同一个域名,同一个端口提供两种连接方式。

java实例代码详见 ----> websocket的那些事 - java client/server Hello World实例

Socket?

        常听人说,Socket编程,直观理解就是网络编程。

       Socket 是TCP/IP网络的API,Socket接口定义了许多函数或例程,程式员能够用他来研发基于TCP/IP协议的网络应用程式。

总结

       1、WebSocket同HTTP一样是应用层的协议,但是它是一种双向通信协议,通过http协议建立连接,通信则使用TCP

        2、Socket是基于 TCP/IP[传输控制层协议] 编程接口

        这样看来,websocket 与 socket 没有半毛钱关系,但,还是有点关系 

       话说 -_- 2008年6月18日,一群WHATWG的工程师在讨论一些技术问题,一个工程师提到说「我们之前讨论的那个东西,不要叫TCPConnection 了,还是起个别的名字吧 」,接着几个名字被提及,DuplexConnection,TCPSocket,SocketConnection ,一个叫mcarter(Michael Carter )的工程师说他马上要写一篇关于Comet的文章,如果可以确定这个名称,想在文章中引用这个名字。

       Socket一直以来都被人用来表示网络中一个连接的两端,考虑到怎么让工程师更容易接受,后来Hixie说了一句「我看WebSocket这个名字就很适合嘛(Hixie briefly pops back online to record that "WebSocket" would probably be a good new name for the TCPConnection object)」,大家都没有异议,紧接着mcarter在Comet Daily中发表了文章Independence Day: HTML5 WebSocket Liberates Comet From Hacks,后来随着各大浏览器对WebSocket的支持,它变成了实际的标准,IETF也沿用了这个名字。

参考资料

Socket.IO:支持WebSocket协议、用于实时通信和跨平台的框架

WebSocket和Socket的区别

WebSocket介绍,与Socket的区别

猜你喜欢

转载自my.oschina.net/u/875122/blog/1801342