websocket是一种比较简单的协议,各种语言中都有很多实现版本,实际上它们差别不大,都是在websocket的基础上做些封装,随便选一个即可。

socket.io就是众多websocket库中的一种,它并不像其它库那样简单地实现了一下websocket,而是在websocket外面包裹了厚厚的一层。普通的websocket(例如ws库)只需要服务端就够了,socket.io自定义了一种基于websocket的协议,所以socket.io的服务端和客户端必须配套。简言之,如果服务端使用socket.io,那么客户端就没得选了,必然也用socket.io的客户端。

socket.io的服务端是基于node实现的(只提供了这一种语言的服务端实现),同时它提供了多种语言的客户端,包括JavaScript、Java、C++、Swift、Dart等,可以看出,socket.io是为了移动端才支持多种语言的,socket.io的目标很高远:统一天下,做最好的websocket库。

socket.io在websocket基础上提供了哪些功能呢?主要包括如下几个方面:

  • 可靠稳定。即便服务端使用代理或者负载均衡,也能够连接成功;
  • 跨平台。各种浏览器、各种移动端操作系统、各种形状的终端都支持;
  • 掉线重连和掉线检测。这跟socket.io自定义的ping协议有关;
  • 封装完好。API简洁清晰,支持room风格的websocket。

然而,在node中ws库远远要比socket.io流行,这可能是因为人们都喜欢接近本质的东西而不喜欢过多封装。ws已经足够好用了。基于ws,socket.io的多余功能完全可以自己用少量代码实现。

参考资料

socket.io
https://www.npmjs.com/package/socket.io
ws
https://www.npmjs.com/package/ws

socket.io简介的更多相关文章

  1. socket.io简单说明及在线抽奖demo

    socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...

  2. Web实时通信之Socket.IO

    前面两篇文章使用了Ajax long polling和WebSocket两种常用的Web实时通信方式构建了简单的聊天程序. 但是,由于浏览器的兼容问题,不是所有的环境都可以使用WebSocket这种比 ...

  3. 【转】Web实时通信之Socket.IO ,真正的兼容ie

    前面两篇文章使用了Ajax long polling和WebSocket两种常用的Web实时通信方式构建了简单的聊天程序. 但是,由于浏览器的兼容问题,不是所有的环境都可以使用WebSocket这种比 ...

  4. 3分钟接入socket.io使用

    WebSocket 简介 传统的客户端和服务器通信协议是HTTP:客户端发起请求,服务端进行响应,服务端从不主动勾搭客户端. 这种模式有个明显软肋,就是同步状态.而实际应用中有大量需要客户端和服务器实 ...

  5. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  6. Socket.IO聊天室~简单实用

    小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...

  7. (转)使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  8. Linux Network IO Model、Socket IO Model - select、poll、epoll

    目录 . 引言 . IO机制简介 . 阻塞式IO模型(blocking IO model) . 非阻塞式IO模型(noblocking IO model) . IO复用式IO模型(IO multipl ...

  9. Node+Express+MongoDB + Socket.io搭建实时聊天应用

    Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...

随机推荐

  1. Palindrome Partitioning leetcode java

    题目: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...

  2. JS实现千分位

    方法一:正则实现 function format (num) { ,}(?=(\d{})+$)/g; return (num + '').replace(reg, '$&,'); } 解释: ...

  3. 机器学习算法与Python实践之(六)二分k均值聚类

    http://blog.csdn.net/zouxy09/article/details/17590137 机器学习算法与Python实践之(六)二分k均值聚类 zouxy09@qq.com http ...

  4. hadoop集群默认配置和常用配置

    http://www.cnblogs.com/ggjucheng/archive/2012/04/17/2454590.html 获取默认配置 配置hadoop,主要是配置core-site.xml, ...

  5. USACO Arithmetic Progressions(暴力)

    题目请点我 题解: 这道题的题意是找出集合里全部固定长度为N的等差数列.集合内的元素均为P^2+q^2的形式(0<=p,q<=M).时间要求5s内.本着KISS,直接暴力. 可是后来竟超时 ...

  6. Tomcat下设置项目为默认项目

    项目的实际使用中常常须要将当前项目设为tomcat的默认项目,而不是进入到tomcat的页面,有几种方法能够实现,注意另外一种.第三种情况须要先删除webapps下的ROOT文件夹,否则会失败. 一. ...

  7. SQLServer中查询表结构(表主键 、列说明、列数据类型、所有表名)的Sql语句

    SQLServer中查询表结构(表主键 .列说明.列数据类型.所有表名)的Sql语句 1.查询数据库中的所有表名称: SELECT name FROM SysObjects Where XType=' ...

  8. SQL基础试题

    第3章  关系数据库标准语言SQL 一.选择题 1.SQL语言是                    的语言,易学习. A.过程化    B.非过程化    C.格式化    D.导航式    答案 ...

  9. IE浏览器兼容方案

    1.使用高版本渲染模式 <meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″/> 2.css hack (1)条件注释 ...

  10. 使用go语言解析xml

    操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个自动报障程序,如果服务出错会自动给指定人发送邮件,配置文件内容如下(default.xml): <?xml ...