[英]How to connect Socket in Swift 4
我想将我的应用程序连接到套接字,这里是代码:-
import UIKit
import SocketIO
class SocketIOManager: NSObject {
static let manager = SocketManager(socketURL: URL(string: "myURL")!)
static let socket = manager.defaultSocket
class func connectSocket() {
let token = UserDefaults.standard.getAccessToken()
self.manager.config = SocketIOClientConfiguration(
arrayLiteral: .connectParams(["token": token]), .secure(true) // problem is here in passing token value
)
socket.connect()
}
class func receiveMsg() {
socket.on("new message here") { (dataArray, ack) in
print(dataArray.count)
}
}
}
我创建了一个新类SocketIOManager.swift,并在视图控制器中调用了我的函数
SocketIOManager.connectSocket()
并且我没有使用localhost url,但我的应用程序仍未连接到套接字,我想我遵循了此方法如何与Socket.io连接? 斯威夫特4 并且我还在info.plist中添加了App Transport Security。 有什么帮助吗? 问题是当我传递令牌值时,它给我错误,否则它将正常工作。 使用套接字时是否需要传递令牌?
试试这个例子:
let manager = SocketManager(socketURL: URL(string:
"http://xxxxxxxxx.com")!, config: [.log(true), .compress])
var socket = manager.defaultSocket
socket.connect()
socket.on(clientEvent: .connect) {data, ack in
print("socket connected")
self.gotConnection()
}
}
func gotConnection(){
socket.on("new message here") { (dataArray, ack) in
print(dataArray.count)
}
}
您应该在SocketIOManager
类中创建一个共享属性,如下所示:
static let shared = SocketIOManager()
然后像这样创建init()
:
var socket: SocketIOClient!
// defaultNamespaceSocket and swiftSocket both share a single connection to the server
let manager = SocketManager(socketURL: URL(string: "http://localhost:3000")!, config: [.log(true), .compress])
override init() {
super.init()
socket = manager.defaultSocket
}
最后编写这样的方法:
func connectSocket() {
let token = UserDefaults.standard.getAccessToken()
self.manager.config = SocketIOClientConfiguration(
arrayLiteral: .connectParams(["token": token]), .secure(true)
)
socket.connect()
}
func receiveMsg() {
socket.on("new message here") { (dataArray, ack) in
print(dataArray.count)
}
}
然后像这样调用您的方法:
SocketIOManager.shared.connectSocket()
关键是您应该在viewController中强烈引用manager属性,并通过static let shared = SocketIOManager()
您执行此操作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.