实时通信框架 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-javajava客户端实现,可用于Android
  • SIOSocket iOS客户端实现
  • socket.io-mongoMongoDB的适配器
  • 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