如何使用Socket.io进行连接?Swift 4

4

我已经阅读了Swift版的Socket.io最新文档。这里有一个新连接的示例:

let manager = SocketManager(socketURL: URL(string: "http://localhost:8080")!, config: [.log(true), .compress])
let socket = manager.defaultSocket

我已经创建了一个类 SocketIOManager,就像这样:

class SocketIOManager: NSObject {

    static let manager = SocketManager(socketURL: URL(string: "myurl.com:443"))
    static let socket = manager.defaultSocket

    class func connectSocket(){
        socket.connect()
    }

    class func reciveMessage(){    
            socket.on("new-message-mob") { (dataArray, ack) in
                print(dataArray.count)
            }
    }
}

然后我只需在我的ViewController中调用方法SocketIOManager.connectSocket()。但服务器产生了错误。我没有开发服务器端,我只需要知道-我是否正确创建了连接? Socket.io如何连接套接字?

P.S 服务器错误-jwt必须提供(似乎没有令牌,但实际上有)。

更新(使用虚拟值):

我是这样传递令牌的:

static let manager = SocketManager(socketURL: URL(string: "https://myurl:443?token=\(token)")!)
static let socket = manager.defaultSocket

似乎没有令牌,但实际上是有的。但你的代码中没有令牌。你确定你传递了令牌吗? - pacification
我这样传递一个令牌:static let manager = SocketManager(socketURL: URL(string: "https://myurl.com:443?token=\(token)")!)。但我不确定如何传递URL参数。 - Nastromo
请再次检查您放置令牌的方式。我们能否看到一个带有虚拟值的示例? - Enea Dume
更新我的帖子,附上令牌示例。 - Nastromo
2个回答

7
为了解决这个问题,我们需要执行以下几个操作:
  1. 在manager.config中添加.connectParams(["token": token]) - 在我的情况下,我必须使用"token"键作为URL参数。
  2. 在manager.config中添加.secure(true)参数。
  3. 在info.plist中添加一个"App Transport Security Settings"键(字典类型)和子键"Allow Arbitrary Loads"(布尔类型),值为YES。

代码:

class SocketIOManager: NSObject {

    static let manager = SocketManager(socketURL: URL(string: "https://yoururl.com:443")!, config: [.log(true), .compress])
    static let socket = manager.defaultSocket


    class func connectSocket(){
        self.manager.config = SocketIOClientConfiguration(
            arrayLiteral: .connectParams(["token": token], .secure(true)
        )
        socket.connect()
    }

    class func disconnectSocket(){
        socket.disconnect()
    }
}

1
你怎么知道的? - mikemags1

6
似乎您将 token 设置在了错误的位置。根据这个问题token 应该在配置中作为头部参数设置。
manager.config = SocketIOClientConfiguration(
    arrayLiteral: .compress, .connectParams(["Authorization": token])
)

尝试以这种方式管理您的token


1
是的,它解决了我的问题。但是我们还需要添加更多的设置来运行这个坏小子。如果有人遇到同样的问题,请看下面的答案。 - Nastromo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接