Socket.io 是一个基于事件的实时双向通信库,能够在 web 开发中帮助我们实现实时通信,它可被用于物联网的应用中。
Socket.io 的基本用法
在实时通信的基础设置前,我们要先准备好 Socket.io。我们可以使用 npm 安装 Socket.io:
npm install socket.io
当我们成功引入 Socket.io 后,要从服务端和客户端分两部分设置实时通信。在服务端,我们要创建一个服务器,监听客户端的连接,并使用 io.on('connection', callback) 监听客户端连接的事件:
const server = require('http').createServer();
const io = require('socket.io')(server);
io.on('connection', function (socket) {
console.log('client connected');
});在客户端中,我们需要使用 io() 连接到服务器。
const socket = io('http://localhost:8080');接下来,在客户端发起消息:
socket.emit('hello', 'world');在服务端监听带有消息的事件:
io.on('connection', function (socket) {
socket.on('hello', function (message) {
console.log(message); // 'world'
});
});如此一来,我们就建立起了一对一的实时通信服务。
用 Socket.io 控制物联网设备
在实际开发中,我们经常需要通过 Socket.io 实现控制物联网设备。为了模拟物联网设备,这里我们配置了两个服务端。
// www.javascriptcn.com code example
const server1 = require('http').createServer();
const io1 = require('socket.io')(server1);
io1.on('connection', function (socket) {
console.log('client connected');
socket.on('control', function () {
console.log('control1');
});
});
const server2 = require('http').createServer();
const io2 = require('socket.io')(server2);
io2.on('connection', function (socket) {
console.log('client connected');
socket.on('control', function () {
console.log('control2');
});
});
server1.listen(8080);
server2.listen(8081);我们在客户端可以控制硬件设备 SERVER1 和 SERVER2:
// 控制第一个物联网设备
const socket1 = io('http://localhost:8080');
socket1.emit('control');
// 控制第二个物联网设备
const socket2 = io('http://localhost:8081');
socket2.emit('control');当我们控制这两个硬件设备时,它们将会在服务端打印出自己的相应信息,如 control1 或 control2。
连接多个硬件设备
现在,我们尝试更进一步地使用 Socket.io 控制多个硬件设备。我们需要在服务器中创建多个 socket:
// www.javascriptcn.com code example
const server = require('http').createServer();
const io = require('socket.io')(server);
const socketList = [];
io.on('connection', function (socket) {
console.log('client connected');
socketList.push(socket);
socket.on('disconnect', function () {
const index = socketList.indexOf(socket);
if (index !== -1) {
socketList.splice(index, 1);
}
});
});这样,我们就可以通过 Socket.io 控制多个连接到服务器的设备:
socketList.forEach(function (socket) {
socket.emit('control');
});接下来,我们可以编写逻辑代码对这些硬件设备进行控制,实现其相应的功能。
总之,通过 Socket.io 可以将控制不同硬件设备的操作进行统一管理。通过上述示例,我们可以更好地理解 Socket.io 的应用于物联网应用的意义。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6abf6a941bf7134c74c4f