使用socket.io搭建一个和客户端通信的交互命令工具.md
Sokect.IO
Socket.IO是一个库,可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信。
基于官方Demo,实现了一套像客户端发送命令并响应回调的通信逻辑。官方Demo的教程文档。
本章内容梗概
本文档指向的Demo
实现原理大致如下:一个客户端像服务器发送消息,服务器广播消息给其他所有客户端,并有一个客户端响应即认为响应成功。
代码示例
server
1
2
3
4
5
6
7
8
9
10
11
12
13
/// 使用express通过http下发命令
app.get('/send', (req, res) => {
let query = req.query
console.log("---------获取到指令入参")
console.log(req.query)
let event = query["event"]
let msg = query["msg"]
/// 超时时间设置,等待指令响应
io.timeout(30000).emit(event, msg, (_, data) => {
console.log('响应指令:', data);
res.send(data[0])
});
});
iOS client
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// 处理Command1指令
socket?.on("Command1") { [weak self] data, ack in
if let value = data[0] as? String {
self?.capture(command: "Command1" + ":" + value)
let params = value.split(separator: ";").map { String($0) }
if params.count >= 2 {
let callback: ((Bool) -> ()) = { result in
ack.with("\(result ? "success" : "failed")")
}
let result = Router(url: "ram://operate", param: ["params": params, "callback": callback])
if result == false {
ack.with("failed")
}
} else {
ack.with("failed")
}
}
}
本文由作者按照 CC BY 4.0 进行授权
