写点什么

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:2139106
用户头像

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

关注

评论

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

MySql 过滤查询(以字母开头,以数字开头,非数字开头,非字母开头)

迷彩

数据库 MySQL 数据库 6月月更

应用配置管理,基础原理分析

Java 微服务 构架

如何写出同事看不懂的Java代码?

码农参上

后端 Java’

Java Core 「13」ReentrantReadWriteLock 再探析

Samson

学习笔记 Java core 6月月更

设计微博系统中“微博评论”高性能高可用计算机构

Fan

架构师实战营

Java 中的Comparator使用技巧

Nick

Java stream 6月月更 Comparator nullsFirst

Python 设计模式:单例模式

宇宙之一粟

Python 单例模式 6月月更

Ajax入门教程

倔强的牛角

ajax 6月月更

Any to Any 实时变声的实现与落地丨RTC Dev Meetup

声网

音频 RTC Dev Meetup 生态专栏 语音处理

Hoo虎符研究院 | 币圈后浪D/Bond一个基于ERC-3475标准开发的去中心化债券生态系统平台

区块链前沿News

Hoo 虎符交易所

SRE Lesson One -- Day1 准备你的工作环境

耳东@Erdong

SRE 6月月更 SRE Lesson One

Eureka的TimedSupervisorTask类(自动调节间隔的周期性任务)

程序员欣宸

Java SpringCloud 6月月更

K8S学习笔记--《开篇词|迎难而上,做云原生时代的弄潮儿》

IT蜗壳-Tango

容器 k8s IT蜗壳教学 6月月更

如何使用物联网低代码平台进行设备调试?

AIRIOT

低代码 物联网 低代码开发

linux之我常用的20条命令( 之三)

入门小站

Linux

如何提高远程办公的效率?| 社区征文

石云升

远程办公 6月月更 初夏征文

全面双录倒计时,融云助力泛金融业务办理高效合规可回溯

融云 RongCloud

一条命令开启监控之旅!

TanCloud探云

开源 监控系统

军体拳代码

工程师日月

6月月更

C语言数据的储存

未见花闻

6月月更

PingCAP 入选 2022 Gartner 云数据库“客户之声”,获评“卓越表现者”最高分

Geek_2d6073

【LeetCode】 移除字母异位词后的结果数组Java题解

Albert

LeetCode 6月月更

在线文本列表批量添加行号工具

入门小站

工具

DOM操作

Jason199

js DOM事件 6月月更

mysql中的查询计划及sql语句性能分析:explain

乌龟哥哥

6月月更

Discourse 新用户可插入媒体的数量

HoneyMoose

深挖数据价值,2022隐私计算大赛开启!

Jessica@数牍

隐私计算 大数据技能大赛 隐匿查询性能优化 隐私求交性能优化

Java 使用 char[] Array 还是 String 存储字符串

HoneyMoose

leetcode 221. Maximal Square 最大正方形(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

接口测试(apipost、jmeter和python脚本)——测试工具

Xd

Java 后端 接口测试

在线JSON转YAML工具

入门小站

工具

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