我想用 socket.io in swift (IOS) 向特定客户端发送消息?

I want to send a message to a particular client with socket.io in swift (IOS)?

我在 nodejs 中的代码没有问题并且工作正常。我可以使用以下代码从服务器向特定客户端发送消息(我使用电子邮件发送消息):

io.sockets.in('julia.girldeveloper@example.com').emit('messages', 'Hello i am julia');

但是在 Swift 我不知道如何向特定客户端发送消息。

谁能帮我把上面的代码写成Swift?

您应该在服务器和客户端上配置它。

这里 之前但我也会在这里解释。

您应该为每个连接的用户提供 ID。将其存储在数据库或任何可以使用的地图上。请记住 ID 必须是唯一的,例如 emailsuserid 或任何唯一的。

Server.js

const sessionsMap = {}; // I save user ID here

io.on('connection', (socket) => {
  socket.emit('askForUserId');

  socket.on('userIdReceived', (userId) => {
    sessionsMap[userId] = socket.id; // save the users on database or Object up to you
  });

  socket.on('send', (message) => {
    const receiverId = sessionsMap[message.receiverId];
    const messageData = message.data;
    socket.broadcast.to(receiverId).emit('mymessage', messageData);
  });
});

客户

抱歉,我不知道 swift 但它是一样的(我希望你明白这一点),服务器处理发送给谁和到达谁的消息。

const userId = 'julia@mail.me'; // this should be unique

io.on('askForUserId', () => {
  io.emit(userId); // your connected user ID save it.
});

io.on('mymessage', (message) => {
  console.log('Yoho had message from', message.senderId)
  console.log(message.text)
});

// send message to other people
io.emit('send', { text: 'Hellow', receiverId: 'john@doe.net', senderId: 'julia@mail.me' })

您可以将以下代码用于 Swift 语言。

import SocketIO
import Foundation

let serverURL = "YourServerURL"

class SocketOpration {

    static let shared = SocketOpration(socketURL: URL(string: serverURL)!)

    let socketURL: URL
    var socket:SocketIOClient!
    var manager:SocketManager!


   init(socketURL: URL) {
        self.socketURL = socketURL
        self.manager = SocketManager(socketURL: self.socketURL, config: [.log(false)])
        self.socket = self.manager.defaultSocket
   }

    func setup() {

          socket.on(clientEvent: .connect) {[weak self] data, ack in
              print("socket connected")
          }

          socket.on(clientEvent: .disconnect) {[weak self] data, ack in
            print("socket disconnected")
          }


        // Get emit Call via On method ( emit will fire from Node )

         socket.on("messages") { [weak self](data, ack) in
            if data.count > 0 {
            }
         }

    }

}