写点什么

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

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

关注

评论

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

解决mac电脑打开应用“意外退出”的问题 (点按“重新打开”以再次打开应用程序)

Rose

意外退出 Mac软件

苹果办公必备远程工具:Royal TSX使用教程

Rose

SSH Royal TSX 教程 Royal TSX 破解 Royal TSX mac下载

深度解析首个Layer3 链 Nautilus Chain,有何优势?

股市老人

深度解析首个Layer3 链 Nautilus Chain,有何优势?

鳄鱼视界

号外号外!简单几步就能把Pinterest视频下载到手机里啦!

frank

Pinterest

Spring Boot:如何配置Undertow容器?不会我教你 | 超级详细

Java你猿哥

spring Spring Boot 后端 ssm java

深度解析首个Layer3 链 Nautilus Chain,有何优势?

西柚子

热点面试题:Vue2、3 生命周期及作用?

Immerse

JavaScript 生命周期 Vue 3 vue2 前端面试题

深度解析首个Layer3 链 Nautilus Chain,有何优势?

威廉META

为什么 Go 语言 struct 要使用 tags

AlwaysBeta

Go

fcpx专业多媒体剪辑软件:Final Cut Pro X中文激活版

真大的脸盆

Mac 视频剪辑 视频处理 视频剪辑处理

Kotlin 学习笔记(一)

修之竹

android kotlin

CorelDRAW2023最新版本平面矢量绘图排版软件

茶色酒

CorelDraw2023

死磕Spark事件总线——聊聊Spark中事件监听是如何实现的

做梦都在改BUG

Java 大数据 spark 事件监听

阿里内网开源:多位大佬联合撰写的Java多线程手册被我拿到了

做梦都在改BUG

Java 多线程

厉害了!刷完这份 532 算法秘笈后,我成功斩获字节、快手offer

做梦都在改BUG

Java 数据结构 面试 算法

从设计角度,深入分析 Spring 循环依赖的解决思路

做梦都在改BUG

Java spring源码 循环依赖

PyTorch深度学习实战 | PyTorch环境搭建

TiAmo

PyTorch

这份Java面试八股文让329人成功进入大厂,堪称2023最强

Java你猿哥

Java 面经 春招 八股文 Java八股文

dapp/lp代币合约流动性质押挖矿分红系统开发详细及案例(源码部署)

系统开发咨询1357O98O718

BetterSnapTool for Mac 帮你整理窗口,提升效率

Rose

BetterSnapTool 窗口管理软件 mac软件下载

EasyRcovery16免费电脑照片数据恢复软件

茶色酒

EasyRcovery16

DAPP马蹄链智能合约系统开发(开发方案及详细)

系统开发咨询1357O98O718

Guitar Pro8吉他学习辅助软件

茶色酒

Guitar Pro8

三天吃透RabbitMQ面试八股文

程序员大彬

Java RabbitMQ 消息队列

量化合约系统开发(规则开发)丨量化合约开发(源码说明)

系统开发咨询1357O98O718

学会用规则引擎Drools,让你早点下班

小小怪下士

Java 程序员 后端 drools

云边端协同时序数据库的挑战与解决方案

CnosDB

时序数据库 开源社区 CnosDB 云边端协同

面试官:如何防止 Java 源码被反编译?我:有点懵

做梦都在改BUG

Java Java源码

学会用规则引擎Drools,让你早点下班

JAVA旭阳

Java drools

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