写点什么

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

  • 2015-01-27
  • 本文字数:1548 字

    阅读完需:约 5 分钟

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

request/response, websocket(flashsocket,ajax…).

搭建 Socket.IO 环境需要先创建一个作为工作空间的目录,然后安装 Node.js,并在工作空间下安装 Socket.IO(命令:npm install socket.io),这样环境已经搭建完成。还可以安装基于 Node.js 框架 (如 Express.js 等) 以协助应用的服务器端开发。

服务器段示例代码如下:

复制代码
var io = require('socket.io').listen(8080);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});

客户端示例代码如下:

复制代码
<script src="socket.io.min.js"></script>
<script>
var socket = io.connect('http://localhost:8080');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>

Socket.IO 由网页程序设计公司 Automattic 使用 JavaScript 开发并基于 MIT 开源协议发布。此外,社区开发者还为 Socket.IO 开发了一些开源插件 / 功能库,如 Socket.IO 1.x 系列版本的 Java 客户端 Socket.IO-client.java ,该功能库可以用于 Android 的相关应用中;用于 Socket.IO 与 iOS 应用间进行通信的简单接口 SIOSocket ;基于 Netty 的 Socket.IO 服务器端的 Java 实现 Netty-socketio 。有关 Socket.IO 更多相关信息,读者可以登录其官网或者托管在 GitHub 的主页站点查看。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-01-27 00:2139261
用户头像

发布了 46 篇内容, 共 53.6 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

【源码分析设计模式 10】SpringMVC中的适配器模式

Java 程序员 后端

【玩转Linux】史上最详细的Linux命令大全和线上问题排查手册

Java 程序员 后端

【设计模式系列14】组合模式及其在JDK和MyBatis源码中的运用

Java 程序员 后端

一文快速搞懂Redis的几种数据类型

Java 程序员 后端

架构实战营 模块四作业

felix

架构实战营

【设计模式系列17】中介者模式原理及其在JDK源码中的体现

Java 程序员 后端

七年阿里升级路,熬到P7,想给正在成长的Java程序员一点建议

Java 程序员 后端

【面试准备】Spring框架面试题

Java 程序员 后端

万字长文!从底层开始带你了解并发编程,彻底帮你搞懂Java锁!

Java 程序员 后端

外包学生管理系统详细架构设计

stars

架构训练营

《黑客之道》-- 网络安全之利用0day双杀-java环境-宏感染渗透

学神来啦

网络安全 漏洞 渗透 kali

存储大师班 | 浅谈 RDMA 与无损网络

QingStor分布式存储

网络 分布式存储

JDK16的新特性

程序那些事

Java 程序那些事 java16 11月日更 JDK16

现代APaaS产品的5C特点

明道云

【消息队列最佳实践】消息恰好被消费一次

Java 程序员 后端

一个CURD三年的Java程序员刷完这份《阿里面试指南(恒山版)》

Java 程序员 后端

学会了axios封装,世界都是你的

CRMEB

一文看懂 Redis 的持久化

Java 程序员 后端

一个SpringBoot问题就干趴下了?我却凭着这份PDF文档吊打面试官

Java 程序员 后端

一周4大厂Java开发岗面试日记(已拿offer)

Java 程序员 后端

一文参透:缓存一致性策略以及雪崩、穿透等问题

Java 程序员 后端

一文彻底帮你打通SpringAOP的任督二脉,大厂高薪指日可待,建议收藏!!!

Java 程序员 后端

Java程序媛的秋招历程(附字节,阿里,百度,网易,美团等面经)

Java spring 程序员 面试 大厂

【源码分析设计模式 9】SpringIOC中的模板方法模式

Java 程序员 后端

音频 AI 算法在 RTC 中的实践

网易云信

人工智能 算法 音视频

一个简单的字符串,为什么-Redis-要设计的如此特别?

Java 程序员 后端

一文带你快速搞懂动态字符串SDS,面试不再懵逼

Java 程序员 后端

一文看懂mybatis底层运行原理解析

Java 程序员 后端

【程序人生】为什么Java开发人员在简历上不敢轻易写精通Java(1)

Java 程序员 后端

【程序人生】为什么Java开发人员在简历上不敢轻易写精通Java

Java 程序员 后端

【设计模式系列24】GoF23种设计模式总结及软件设计7大原则

Java 程序员 后端

Socket.IO:支持WebSocket协议、用于实时通信和跨平台的框架_JavaScript_李小兵_InfoQ精选文章