【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

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

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

关注

评论

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

前端高频面试题

helloworld1024fd

Mysql重启后innodb和myisam插入的主键id变化总结

知识浅谈

8月月更

什么是研发效能的「黄金三角」?如何助力企业提升效能?

万事ONES

使用域名注册服务 Domains配置域名【华为云至简致远】

科技云未来

域名配置 端口映射

上海web前端培训课程

小谷哥

web前端面授培训课程

小谷哥

Python爬虫抢购某宝秒杀商品

弑着去忘记う

后端

大数据培训学习开发技术费用

小谷哥

多图预警!华为 ECS 与 阿里云 ECS 对比实战【华为云至简致远】

科技云未来

华为云 虚拟私有云VPC ECS

安全狗《云原生安全威胁分析报告》首次提出双检测模型

Geek_2d6073

Webpack5新特性:使用 Assets Module 处理图片和字体资源

昆吾kw

前端 前端工程化 webpack

SpringBoot如何优雅地进行响应数据封装、异常处理?

程序员小毕

Java 源码 程序员 面试 spring-boot

阿里巴巴2022最新Java架构师进阶宝典!助力程序员金九银十面试跳槽涨薪

程序员小毕

Java 程序员 架构 面试 算法

源码阅读其实很简单!阿里业务架构师手写JDK源码笔记(2022版)真香

Java永远的神

Java 程序员 面试 程序人生 jdk源码

如何在 UE4 中制作一扇自动开启的大门

HelloWorld杰少

8月月更

基于ModelArts的动漫头像自动生成丨【华为云至简致远】

科技云未来

华为云ModelArts

利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】

科技云未来

nginx securecrt RTMP SSH工具

超多精美礼品等你来拿!2022年中国混沌工程调查启动

混沌工程实验室

混沌工程

浅谈程序员的职业操守

阿里技术

java培训机构与自学的优缺点有什么

小谷哥

易观分析:2022年Q2中国网络零售B2C市场交易规模达23444.7亿元

易观分析

B2C 网络零售

Android技术分享| 一对一音视频呼叫邀请开发流程(一)

anyRTC开发者

android 音视频 移动开发 视频通话 呼叫邀请

字节算法大神手写算法笔记,已连续多次霸榜 GitHub Trending 首页

冉然学Java

GitHub 算法 Java 分布式 字节

Tinymce plugins [Tinymce扩展插件集合]

Five

插件开发 tinymce 富文本编辑器 8月月更

tinymce 如何实现动态国际化

Five

插件开发 tinymce 富文本编辑器 8月月更

TiFlash 计算层概览

TiDB 社区干货传送门

数据库 分布式数据库 TiDB

大型连锁百货运维审计用什么软件好?有哪些功能?

行云管家

IT运维 运维审计 运维软件 百货

通过Gitea实现内外网repo管理

DisonTangor

git

树莓派 USB摄像头 实现网络监控( MJPG-Streamer)

Five

树莓派 网络监控 #web 8月月更

leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)

okokabcd

数组 LeetCode 数据结构与算法

拿来即用!Get计算机视觉核心知识,看这本书就够了!

博文视点Broadview

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