【问题标题】:Websocket keeps disconnecting (Starscream)Websocket 不断断开连接(红蜘蛛)
【发布时间】:2019-12-13 20:45:57
【问题描述】:

我正在尝试订阅本地网络中 Mac 上托管的 Websocket。但它几乎在连接后立即断开连接。我可以发送消息,我可以在我的 Mac 上看到它正在接收它们(至少是命令),但它会立即断开连接。

它应该像这样工作: 我连接 我发送一个 json 格式的字符串:{"+":["v.altitude"]}(订阅高度) Websocket 定期回复{"v.altitude":71.323}

我在我的 Mac 上使用 websocoat 在本地尝试了它,它看起来像这样:[Image] (https://ibb.co/JqjFSs7)

Xcode 控制台输出这个:

正在连接。
已连接。
DISCONNECTED 可选(“操作无法完成(Starscream.WSError 错误 1.)”)。

import UIKit
import Starscream

class ViewController: UIViewController, WebSocketDelegate, WebSocketPongDelegate {

    func websocketDidReceivePong(socket: WebSocketClient, data: Data?) {
        print("PONG")
    }

    var websocket: WebSocket = WebSocket(url: URL(string: "ws://192.168.178.23:8085/datalink")!)
    let jsonObject: [String: Any] = ["run":["f.light"]]//["+":["v.altitude", "v.lightValue", "v.gearValue"]]
    let dic: NSDictionary = ["run" : ["f.light"]]
    var components = URLComponents()

    override func viewDidLoad() {
        components.scheme = "ws"
        components.host = "192.168.178.23"
        components.path = "/datalink"
        components.port = 8085
        let url = components.url
        super.viewDidLoad()
        print(url!)
        websocket = WebSocket(url: url!)
        websocket.delegate = self
        print("Connecting")
        websocket.connect()
    }

    func websocketDidConnect(socket: WebSocketClient) {
        print("CONNECTED")

        let messageString = "{\"run\":[\"f.light\"]}"

        websocket.write(string: messageString)
    }

    func websocketDidDisconnect(socket: WebSocketClient, error: Error?) {
        print("DISCONNECTED \(error?.localizedDescription)")
    }

    func websocketDidReceiveMessage(socket: WebSocketClient, text: String) {
        print("MESSAGE: STRING")
    }

    func websocketDidReceiveData(socket: WebSocketClient, data: Data) {
        print("MESSAGE: DATA")
    }
}

【问题讨论】:

  • 您应该与服务器保持 ping pong。这是您检查服务器连接并在需要时重新连接的方式。
  • 我知道要实现 didReceivePong 方法,但我应该如何进行 ping 操作?

标签: swift websocket starscream


【解决方案1】:

对于红蜘蛛 4,解决方案是

socket = WebSocket(request: request, certPinner: FoundationSecurity(allowSelfSigned: true))

【讨论】:

    【解决方案2】:

    好的,我想通了。红蜘蛛一直在尝试验证 SSL 证书(我的电脑没有提供),所以连接失败。 我禁用了这样的行为: websocket.disableSSLCertValidation = true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多