写点什么

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

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

关注

评论

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

一文读懂GPU虚拟化、显卡直通和GPU云桌面

青椒云云电脑

桌面云 云桌面

Apache IoTDB 毕业三周年!纪念T恤+表情包免费来袭~

Apache IoTDB

iPhone15系列发布,正式宣布对AV1的硬解支持

微帧Visionular

视频编解码

企业选择云桌面系统的主要原因是什么?

青椒云云电脑

云桌面 云桌面厂家

如何构建现代化数据平台?私有云五大方面赋能企业用户

青椒云云电脑

云平台 云平台技术

GPU云还是传统图形工作站?测绘单位的探索和创新

青椒云云电脑

图形工作站

电脑宕机耽误工作?云桌面办公上云更高效

青椒云云电脑

云桌面

恭喜!龙蜥获得 2023 大学生操作系统设计赛二等奖及特殊贡献奖

OpenAnolis小助手

开源 操作系统 龙蜥社区 获奖 全国大学生系统能力大赛

为什么用代理ip网页加载不出来,一直转圈?

巨量HTTP

代理IP

云桌面是什么?看完这篇你就明白了

青椒云云电脑

桌面云 云桌面

一文读懂GPU直通技术

青椒云云电脑

gpu

GPU云桌面如何赋能3D图形制作场景

青椒云云电脑

桌面云 云桌面

精打细算:出海企业如何选择低成本高效率的产品推广渠道

出海的猹

营销 出海社交 产品增长 出海企业

2023 年中国国际服务贸易交易会发布:和鲸科技两项成果入选“智赋百业”人工智能融合发展与安全应用典型案例

ModelWhale

人工智能 大模型 AIGC

移动云桌面,随时随地交付桌面系统!

青椒云云电脑

云桌面

平台工程实践,让应用开发如搭积木一般简单

北京好雨科技有限公司

Kubernetes DevOps 平台工程

软件测试/测试开发丨Web自动化—capability参数配置 学习笔记

测试人

Python 程序员 软件测试 自动化测试 Web自动化测试

科兴未来 | 第十届中国(泰州)国际大健康产业高层次人才创新创业大赛公告

科兴未来News

为什么企业需要视频会议私有部署?

BeeWorks

为什么新加坡会成为国内企业出海的第一站?

出海的猹

企业出海 出海

出海第一步,先选云服务

出海的猹

出海服务商 海外市场 出海企业 云服务商

最高提升10倍性能!揭秘火山引擎ByteHouse查询优化器实现方案

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号9月PK榜

创新型联合共创 |数糖 × 和鲸:挖掘数据价值,形成数据产出

ModelWhale

数据分析 数据 商业价值 地理标志 联合共创

IT企业数据安全如何保障?部署私有云就够了

青椒云云电脑

私有云 云桌面

出海项目冷启动攻略:如何利用一个标签实现产品推广增长

出海的猹

出海社交 海外市场 出海企业

克服差异:出海企业产品推广迈出第一步的关键考虑因素

出海的猹

营销 产品增长 用户 运营 出海企业

云电脑到底是不是自己的电脑?

青椒云云电脑

云电脑

科兴未来 | 2023苏州宿迁“1+5”共建园区创新创业大赛

科兴未来News

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