实时通信框架 Socket.IO
时间:2022-05-07
本文章向大家介绍实时通信框架 Socket.IO,主要内容包括Socket.IO 简介、应用案例、起步实践、实现、测试、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
主要内容: 1. Socket.IO 是什么?有什么特点 2. 实际应用的案例 3. 动手开发一个小示例
Socket.IO 简介
Socket.IO 可以实现实时双向基于事件的通信,专注于速度和可靠性,官方称其是最快的和最可靠的实时引擎
Socket.IO 支持非常全面的通信机制,包括 :
- WebSocket
- Adobe Flash Socket
- AJAX长轮询
- AJAX multipart streaming
- 持久Iframe
- JSONP轮询
Socket.IO 根据浏览器的支持情况自动选择最佳方式
Socket.IO 完全由JavaScript实现,基于Node.js,浏览器中引用Socket.IO的JS文件,服务器中使用Node.js创建一个server,只需很少的代码就可以实现实时通信
Socket.IO 有很丰富的扩展,例如 :
-
Netty-socketio
java 版本的Socket.IO server -
socket.io-client-java
java客户端实现,可用于Android -
SIOSocket
iOS客户端实现 -
socket.io-mongo
MongoDB的适配器 -
socket.io-redis
Redis的适配器
应用案例
浏览器中的 Linux 终端 - tty.js
tty.js 可以让我们在页面中操作Linux服务器,就像使用正常的SSH客户端一样实时执行命令
tty.js就是基于 socket.io 实现,体验非常顺畅,也很稳定
起步实践
目标
在页面中实时动态显示server的时间
实现
安装 socket.io
npm install socket.io
服务器端代码 server-clock.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('server-clock.html');
});
io.on('connection', function(socket){
console.log('a user connected');
});
function tick(){
var now = new Date().toUTCString();
io.emit('time', now);
}
setInterval(tick, 1000);
http.listen(3000, function(){
console.log('listening on *:3000');
});
客户端代码 server-clock.html
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('time', function (time){
document.getElementById('time').innerHTML = time;
});
</script>
<body>
Current server time is:
<b><span id="time"></span></b>
</body>
测试
启动
node server-clock.js
浏览器中访问
http://localhost:3000/
效果
小结
socket.io 的应用非常广泛,很可靠,如果有实时通信的需求,可以考虑下
官网地址:http://socket.io
- 51 Nod 1027 大数乘法【Java大数乱搞】
- SQL常用的基础语法
- 51 Nod 1028 大数乘法 V2【Java大数乱搞】
- Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题
- Windows下Cygwin可以使用哪些Linux命令
- Codeforces Round #426 (Div. 2)【A.枚举,B.思维,C,二分+数学】
- Cygwin,打造你的Windows下Linux环境
- “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】
- 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
- POJ 1655 Balancing Act【树的重心】
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
- 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】
- POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 7.4上安装配置Oracle 11.2.0.4图文教程
- linux磁盘管理软RAID的实现原理分析和方法分享
- Centos7下Samba服务器配置(实战)
- Linux系统中创建SSH服务器别名的两种方法
- Linux下卸载MySQL8.0版本的操作方法
- Linux服务器上安装Python3的两种方式
- Centos7安装ElasticSearch 6.4.1入门教程详解
- Windows 和 Linux 上Redis的安装守护进程配置方法
- 在Linux系统上安装Spring boot应用的教程详解
- 使用openssl 生成免费证书的方法步骤
- linux cd的含义以及用法
- leetcode栈之比较含退格的字符串
- CentOS使用本地yum源搭建LAMP环境图文教程
- 清除CentOS 6或CentOS 7上的磁盘空间的方法
- leetcode栈之二叉树的前序遍历