繁体   English   中英

如何在Swift 4中连接Socket

[英]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。 有什么帮助吗? 问题是当我传递令牌值时,它给我错误,否则它将正常工作。 使用套接字时是否需要传递令牌?

URL是否受HTTPS保护? 如果不是,则可能是由于应用程序传输安全性限制而引起的问题。

请参阅信息清单参考

也看到这个帖子在这里

如果那不是问题。 我建议检查双方的Socket版本(服务器和客户端)是否相同。 因此,最近我遇到了一个问题。

希望能帮助到你!

试试这个例子:

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM