【问题标题】:Problems subscribing to a room (socket) with Socket.IO-Client-Swift and Swift, Sails.js on the Server使用服务器上的 Socket.IO-Client-Swift 和 Swift、Sails.js 订阅房间(套接字)的问题
【发布时间】:2018-03-12 21:36:37
【问题描述】:

在 Swift 上,我使用

socket.on("test") {data, ack in
    print(data)
}

为了在我的 Sails.js API 上订阅房间(套接字)。

当我从服务器广播消息时,

sails.sockets.broadcast('test', { text : 'ok' })

socket.on 处理程序永远不会被调用。 但是,如果我在从 swift 连接我的 socket.io 客户端时将“log”TRUE 设置为 config,则在 Socket-IO 日志中消息到达。

怎么了?

【问题讨论】:

    标签: ios node.js swift socket.io sails.js


    【解决方案1】:

    最终,我发现了我的错误:

    我做的整个过程是对的: (加入房间的请求由服务器完成,带有sails.sockets.join

    错误的是将socket.onROOM NAME 参数一起使用。

    我会更好地解释它,对于其他有同样问题的人:

    1. 在 Swift 中,您应该通过向服务器上接受 websocket 请求(GET、POST、PUT)的端点发出 websocket 请求来订阅。例如,您可以发出 POST 请求,将房间名称传递到正文中。

      socket.emitWithAck("post", [
          "room": "testroom",
          "url": "/api/v1.0/roomsubscribing"
      ]).timingOut(after: 0) {data in
          print("Server responded with \(data)")
      }
      
    2. 在服务器端,在房间订阅端点内,您应该有以下代码:

      roomSubscribing: function(req, res) {
          if (!req.isSocket) {
            return res.badRequest();
          }
      
          sails.sockets.join(req, req.params('room'), function(err) {
            if (err) {
              return res.serverError(err);
            }
          }); 
       }
      
    3. 当服务器要向“testroom”房间的订阅者广播一些数据时,必须使用以下代码:

      sails.sockets.broadcast('testroom', { message: 'testmessage' }
      

    现在在 swift 这边你必须使用:

    socket.on("message") { data, ack in
        print(data)
    }
    

    为了让消息处理程序工作。我认为您应该使用房间名称,而不是使用您在广播数据时在服务器中使用的 KEY/VALUE 条目的 KEY(在本例中为“消息”)。

    【讨论】:

      【解决方案2】:

      我对sockets只有一点经验,但万一没人回答……

      我认为您缺少三步套接字过程的第一步:

      1. 客户端向服务器发送消息,要求订阅特定房间。

      2. 客户端设置socket.on 来处理来自该房间的特定事件。

      3. 服务器在特定房间广播事件。对于该特定事件,所有拥有.on 的订阅者/客户都会做出反应。

      我可能是错的,但从你的描述中听起来你错过了第一步。您的客户端必须使用io.socket 发送消息,例如here,然后您的服务器必须使用套接字请求让他们加入房间,例如示例here

      (在没有socket.on 触发的情况下存在日志数据似乎可以确认该事件已在房间内广播,但该客户端未订阅)

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2021-03-31
        • 1970-01-01
        • 2018-07-11
        • 2016-05-12
        • 2014-11-13
        • 2019-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多