【问题标题】:How can I use SocketRocket in a Swift Project?如何在 Swift 项目中使用 SocketRocket?
【发布时间】:2019-09-18 13:35:25
【问题描述】:

我是 iOS 编程新手,仍在学习 Swift。我正在尝试在 Swift 项目中使用 SocketRocket 库https://github.com/facebook/SocketRocket,以便通过 Web 套接字连接到使用 MAMP 创建的我的 Web 服务器。 我知道有 Starscream https://github.com/daltoniam/Starscream 可以在 Swift 中使用,但它会出现错误,我无法按照我在此处的解释使其工作:How to fix "websocket is disconnected: Invalid HTTP upgrade" error using Starscream

SocketRocket 是用Objective-C 写的,我看不懂,试图查看文档,但我不知道如何将它翻译成 Swift 并在我的项目中实现它的方法。 已经使用 Cocoapods 安装了 SocketRocket。所以它不需要标题桥接文件,因为我使用了“use_frameworks!”在 podfile 中。

ViewController.swift 文件:

import UIKit
import SocketRocket

class ViewController: UIViewController, SRWebSocketDelegate { //ERROR: Type 'ViewController' does not conform to protocol 'SRWebSocketDelegate' Do you want to add protocol stubs?
    
    var urlRequest = NSURLRequest(URL: NSURL(string: "http://host.com")) //EROOR: Cannot convert value of type 'NSURL?' to expected argument type 'URL' Insert ' as! URL'
    
    var socket = SRWebSocket(URLRequest: urlRequest)
    
    //let socket = SRWebSocket(url: "ws://localhost:8888")

    override func viewDidLoad() {
        super.viewDidLoad()
        
        socket.open()
        socket.send()
        socket.close()
    }
    
    func webSocketDidOpen(webSocket: SRWebSocket!) {
        print("socket opened");
    }
    
    func webSocket(webSocket: SRWebSocket!, didCloseWithCode code: Int, reason: String!, wasClean: Bool) {
        print("code: \(code) reason:\(reason) ");
    }
    
    func webSocket(webSocket: SRWebSocket!, didFailWithError error: NSError!) {
        print("error: \(error)");
    }
    
    func webSocket(webSocket: SRWebSocket!, didReceiveMessage message: AnyObject!) {
        print("received message")
    }
}

这是我尝试编写的代码...但是在 cmets 中显示了错误。 希望你们能帮助我。谢谢!!! :)

【问题讨论】:

  • 我认为您仍然需要将其包含在桥接头中,因为它不是 Swift 框架,您需要导入库标头
  • 嗨!感谢您的回答 :) 但没有必要像这里解释的那样:stackoverflow.com/questions/31884507/… 事实上 Xcode 向我展示了有关框架的建议。我的问题是我不知道如何在 Swift 中使用 SocketRocket :(

标签: ios swift websocket socketrocket


【解决方案1】:

嗨,克里斯蒂安,您可以使用“pod 'Socket.IO-Client-Swift'”,它也使用了红蜘蛛。

您也可以在此处查看文档。 Socket.IO-Client-Swift

    private var socket: SocketIOClient?
    private var manager: SocketManager?


    private func initializeSocket() {

    self.manager = SocketManager(socketURL:  URL(string: self.baseUrlForSocket)!, config: [.log(true), .forceNew(true), .reconnectAttempts(10), .reconnectWait(6000), .connectParams(["authorization": authKey]), .forceWebsockets(true), .compress])

    self.socket = manager?.defaultSocket
 }

这里baseUrlForSocket是你提供的socket url,authKey是授权值。

如有任何疑问,请告诉我。

【讨论】:

  • 嗨!感谢您的回答 :) 我将您的代码复制到 Xcode 中,但现在它显示:“使用未解析的标识符 'authKey'”我该如何解决?
  • @CristianWang,对于 authKey,请在此处使用您的 accessToken 或授权令牌。如有任何疑问,请告诉我
  • 请在这里写下baseSocketUrl或者检查它是否需要授权密钥。
  • 我想连接到 localhost:8888
  • 我也在常见问题解答中读到:这个库不是一个 WebSockets 库。该库仅适用于实现 socket.io 协议的服务器...
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多