StompClientLib 1.4.1

StompClientLib 1.4.1

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布上次发布2021 年 3 月
SPM支持 SPM

Kuray OGUN 维护。



StompClientLib

License platform Cocoapods

Swift 5.0 Swift 4.2 Swift 3.0 Pod Version Issues

Swift 5+ StompClient Library

## 简介

StompClientLib 是一个 Swift 编写的 STOMP 客户端。它使用 Facebook 的 SocketRocket 作为 WebSocket 依赖项。SocketRocket 使用 Objective-C 编写,但 StompClientLib 的 STOMP 部分是使用 Swift 编写的,其用法也是 Swift。您可以在 Swift 5+、4+ 和 3+ 项目中使用此库。

这最初是从 AKStompClient 分支出来的(此库目前无法正常工作)

支持的 Stomp 版本

Stomp 版本

  • 1.1
  • 1.2
  • 可能不支持 1.0(从未测试过)

示例

要运行示例项目,请先克隆仓库,然后在 Example 目录中运行 pod install

需求

  • 支持 iOS 8.0+
  • 支持 XCode 8.1, 8.2, 8.3
  • 支持 XCode 9.0+
  • 支持 XCode 10.0+
  • 支持 XCode 12.1+
  • Swift 3.0, 3.1, 3.2
  • Swift 4.0, Swift 4.1, Swift 4.2, Swift 5.0

安装

StompClientLib可通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中

CocoaPods

pod "StompClientLib"

Carthage

github "WrathChaos/StompClientLib"

使用

import StompClientLib

导入后,您可以打开与您的WebSocket服务器的连接。

var socketClient = StompClientLib()
let url = NSURL(string: "your-socket-url-is-here")!
socketClient.openSocketWithURLRequest(request: NSURLRequest(url: url as URL) , delegate: self)

连接后,您需要实现一些代理方法。

StompClientLibDelegate

stompClientDidConnect

func stompClientDidConnect(client: StompClientLib!) {
print("Socket is connected")
// Stomp subscribe will be here!
socketClient.subscribe(destination: topic)
// Note : topic needs to be a String object
}

stompClientDidDisconnect

func stompClientDidDisconnect(client: StompClientLib!) {
print("Socket is Disconnected")
}

didReceiveMessageWithJSONBody ( 通过STOMP接收的消息 )

您的JSON消息将被转换为AnyObject类型的JSON体,您将在该函数中接收到您的消息

func stompClient(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: AnyObject?, akaStringBody stringBody: String?, withHeader header: [String : String]?, withDestination destination: String) {
print("Destination : \(destination)")
print("JSON Body : \(String(describing: jsonBody))")
print("String Body : \(stringBody ?? "nil")")
}

didReceiveMessageWithJSONBody ( 作为字符串的通过STOMP接收的消息 )

您的JSON消息将被转换为AnyObject类型的JSON体,您将在该函数中接收到您的消息

func stompClientJSONBody(client: StompClientLib!, didReceiveMessageWithJSONBody jsonBody: String?, withHeader header: [String : String]?, withDestination destination: String) {
  print("DESTINATION : \(destination)")
  print("String JSON BODY : \(String(describing: jsonBody))")
}

serverDidSendReceipt

如果您要在应用程序中使用STOMP进行内购,您可能需要使用此函数来获取收据

func serverDidSendReceipt(client: StompClientLib!, withReceiptId receiptId: String) {
  print("Receipt : \(receiptId)")
}

serverDidSendError

错误消息将在该函数中接收到

func serverDidSendError(client: StompClientLib!, withErrorMessage description: String, detailedErrorMessage message: String?) {
  print("Error Send : \(String(describing: message))")
}

serverDidSendPing

如果需要控制服务器的ping,这里是你的部分

func serverDidSendPing() {
  print("Server ping")
}

如何订阅和取消订阅

存在订阅和取消订阅的函数。注意:你应该处理你的订阅和取消订阅方法!建议:在"stompClientDidConnect"函数中订阅你的主题,在stompClientWillDisconnect方法中取消订阅你的主题。

订阅

socketClient.subscribe(destination: topic)
// Note : topic needs to be a String object

取消订阅

socketClient.unsubscribe(destination: topic)

重要:你必须为订阅或取消订阅发送你的目的地址!

带有头部的取消订阅

let destination = "/topic/your_topic"
let ack = destination
let id = destination
let header = ["destination": destination, "ack": ack, "id": id]

// subscribe
socketClient?.subscribeWithHeader(destination: destination, withHeader: header)

// unsubscribe
socketClient?.unsubscribe(destination: subsId)

带指定时间自动重连

如果您需要带指定时间自动重连,可以使用这个功能;如果不需要,它将每秒尝试重新连接。

// Reconnect after 4 sec
socketClient.reconnect(request: NSURLRequest(url: url as URL) , delegate: self as StompClientLibDelegate, time: 4.0)

指定时间自动断开连接

// Auto Disconnect after 3 sec
socketClient.autoDisconnect(time: 3)

登录密码实现

这只是一个示例。您需要将其转换为您的实现。 #42

let connectFrame = "CONNECT\n login:admin\n passcode:password\n\n\n\0"
socket.write(string: connectFrame)

未来增强功能

  • 完成一个有效示例
  • 添加Carthage安装选项
  • 添加Swift Package Manager安装选项
  • XCode 9兼容性
  • Swift 4兼容性和测试

变更日志

完整变更日志

实施增强功能

  • SUBSCRIBE和UNSUBSCRIBE代理缺失 #16

已关闭问题

  • 错误域=SRWebSocketErrorDomain 错误码=2132 "从服务器接收到无效的响应代码 403" #86
  • 委托应该是弱引用 #83

1.3.8 (2020-03-08)

完整变更日志

实施增强功能

  • 当我从 ws:// 移动到 wss:// 后,套接字停止工作 #67
  • 自签名证书,400错误

修复错误

已关闭问题

合并的拉取请求

1.3.7 (2019-08-26)

完整变更日志

已关闭问题