文章

使用socket.io搭建一个和客户端通信的交互命令工具.md

Sokect.IO

Socket.IO是一个库,可以在客户端和服务器之间实现 低延迟, 双向基于事件的 通信。

基于官方Demo,实现了一套像客户端发送命令并响应回调的通信逻辑。官方Demo的教程文档

本章内容梗概

本文档指向的Demo

实现原理大致如下:一个客户端像服务器发送消息,服务器广播消息给其他所有客户端,并有一个客户端响应即认为响应成功。

image-20241230113237618

代码示例

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 进行授权