写点什么

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

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

关注

评论

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

达索多物理场有限元仿真软件Abaqus介绍-达索指定代理商思茂信息

思茂信息

仿真 abaqus 有限元分析

京东商品列表API助力电商竞品分析与价格监控

tbapi

京东API 京东商品列表API 京东数据采集 关键词搜索京东api

5大建议助您顺利实施YashanDB项目

数据库砖家

AI原生应用架构

陈一之

大模型 AI应用 应用架构

【RFID隧道机哪家做得好】能高速盘点的隧道机有哪些厂家?

斯科信息

斯科信息 RFID隧道机

Rokid 手势识别技术深度解析:解锁 AR 无接触交互的核心秘密

鸽芷咕

AR Rokid 手势识别

哈尔滨二级等保测评:企业安全合规的关键支撑与实践方向

等保测评

首站深圳!构建AI时代数据护城河 YashanDB引领数智升级加速度

极客天地

Playwright MCP入门指南:从零开始构建自动化测试

测试人

软件测试 playwright

开源鸿蒙技术大会2025 | 定位与感知分论坛:‌‌构建开源鸿蒙全场景定位感知用户体验

科技热闻

5大关键技巧助您优化YashanDB数据库性能

数据库砖家

5大理念助您更有效地管理YashanDB数据库

数据库砖家

大数据-124 - Flink State:Keyed State、Operator State KeyGroups 工作原理 案例解析

武子康

Java 大数据 flink spark 分布式

跨境商家最容易忽视的一步:如何判断一个国家的红人营销成熟度?

Wolink

跨境贸易 出海企业 海外营销推广 沃链Wolink 达人营销

线程池ThreadPoolExecutor源码深度解析|得物技术

得物技术

Java 缓存 编译器 DNS 调度

区块链 Web3 项目开发

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

华为开发者空间携手乐知行:轻松实现智能网联小车数据可视化系

华为云开发者联盟

人工智能 华为云开发者空间

使用 Playwright MCP Server 为你的 AI Agent 赋予浏览器自动化能力

测试人

软件测试

低代码应用授权避坑指南:创建者移交 + 开发者配置,权限边界一次分清

引迈信息

数字化转型下半场,企业最该补足的三大数据能力

助睿数智

数据分析 数据治理 数据集成 BI 分析工具 智能分析

智算驱动·万象更新 | 超智算AI项目路演大赛在京落幕,以赛为媒共筑产业创新生态

新消费日报

强化烟草专卖人才队伍建设:实现人员精准画像与科学考评

中烟创新

亚马逊云科技 WAF 指南(十)用 Amazon Q Developer CLI 解决 DDoS 防护与 SEO 冲突问题

亚马逊云科技 (Amazon Web Services)

5大挑战与应对策略:使用YashanDB时须知

数据库砖家

5个YashanDB功能改善企业运营效率的技巧

数据库砖家

黑龙江等保测评:护航企业数字化与合规运营

等保测评

5大核心功能使YashanDB成为行业首选

数据库砖家

5大特性让YashanDB成为企业级数据库的宠儿

数据库砖家

Python 的 PyPy 能追上 Go 的性能吗?

王中阳Go

Python Go 后端

5个YashanDB特性助力企业打造数据驱动文化

数据库砖家

AI时代下,中国低代码市场发展的如何了?附行业研究报告

优秀

人工智能 AI 低代码

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