【发布时间】:2021-03-25 23:34:06
【问题描述】:
我正在尝试连接到特定频道,以便我只能收听发送到该频道的事件。我在服务器端使用了 Laravel Echo。
【问题讨论】:
标签: ios swift laravel socket.io
我正在尝试连接到特定频道,以便我只能收听发送到该频道的事件。我在服务器端使用了 Laravel Echo。
【问题讨论】:
标签: ios swift laravel socket.io
在这个问题上花了一些时间后,我终于找到了解决方案。这是解决方案
private let manager = SocketManager(socketURL: URL(string: "http://testserver.com:6001")!, config: [.log(true), .compress, .reconnects(true), .reconnectAttempts(-1), .forceWebsockets(true), .forcePolling(true)])
private var socket: SocketIOClient!
private var nameSpace = "App\\Events\\"
func connect() {
socket = manager.defaultSocket
socket.connect()
socket.on(clientEvent: .connect) {data, ack in
let channelData = ["channel": "test-channel"]
self.socket.emit("subscribe", channelData) {
print("Sockets: test-channel subscribed")
socket.on("\(nameSpace)newMessage") { (data, ack) in
print("Sockets: newMessage event called")
}
}
}
}
【讨论】:
SocketManager 和SocketIOClient)
我会研究 URLSessionWebSocketTask.. 他们设置 API 的方式有点奇怪,但它是标准库中的唯一选项。我在下面添加了一个链接以开始使用..
https://medium.com/better-programming/websockets-in-ios-13-using-swift-and-xcode-11-18fa3000d802
对于频道订阅,您很可能需要通过套接字发送消息并在后端保存对该频道的引用。这就是前端代码的样子..
https://github.com/BJBeecher/Networking/blob/master/Sources/Networking/WebSockets/WebSocket.swift
【讨论】: