通过WebSocket在iOS、Android和Web上实现聊天功能
普里西拉·杜普雷兹( Priscilla Du Preez)在Unsplash上的照片
我用Node.js做过网络聊天应用程序,也做过简单版的安卓聊天应用。为了完整起见,我还创建了一个简单的iOS 网络聊天应用。
你可以在此处获取代码。
网络聊天在 iOS 中是如何实现的
1.创建一个 ObservableObject
首先,让我们创建一个ObservableObject
类型的类,因为我们想在消息更新时保留消息,这些消息将在SwiftUI中自动更新。
class WebSocketManager: ObservableObject {
@Published var messages: [String] = []
// other code
}
2. 创建 WebSocket
接下来,创建WebSocket对象。与Android不同,创建WebSocket不需要外部库。我们来看一下例子。
private let socket: URLSessionWebSocketTask =
URLSession(configuration: .default).webSocketTask(
with: URL(string: "ws://localhost:8082")!)
我们再次链接到按照本文设置的localhost :8082。
一旦设置完成,就可以使用resume()
连接到服务器
func setup() {
socket.resume()
self.receiveMessage()
}
至于receiveMessage
,我们将在下面解释。
3. 收听传入的消息
在 receivedMessage()
中,我们只需
- 调用
socket.received()
函数。 - 在
received
函数中,我们将检查.success
和.failure
。 - 在
.success
时,我们只收集string
,尽管结果也可以是data
。 - 收到
string
数据后,我们会将这些数据发送回主线程以相应地更新self.message
。 - 最后,由于已经成功处理了消息,我们需要再次调用
receivedMessage()
来继续监听该消息。
代码如下。
func receiveMessage() {
socket.receive { result in
switch result {
case .failure(let error):
print("Error Detected: \(error)")
case .success(let message):
switch message {
case .string(let text):
DispatchQueue.main.async {
self.messages.append("\(text)")
}
default:
print("Received data different format data")
}
self.receiveMessage()
}
}
}
4. 发送消息
除了接收消息,我们还设置了发送消息功能。发送消息时使用socket.send
函数,一旦消息发送的不成功,它能及时反馈。
func sendMessage(message: String) {
self .socket.send(.string("iOS: \(message)")) { (err) in
if err != nil {
print("发送时出错:\(err.debugDescription) )")
}
}
self .messages.append("iOS: \(message)")
}
好了。只需要不到50行的代码就能完成简单的IOS应用啦(不包括SwiftUI界面方面的代码)。
原文作者:Elye
原文链接:https://medium.com/mobile-app-development-publication/simple-ios-chat-app-in-50-lines-of-code-66064ae50466