ios 中通过红蜘蛛的 Websocket 连接
Websocket connection via starscream in ios
目前我正在使用 Action Cable client 连接到 URL 并订阅频道。但是图书馆似乎有一些问题,因为它偶尔无法订阅频道。以下是我当前的 Action cable 客户端设置代码
func setupActionCable(){
guard let urlString = URL(string: "wss://mysocketurl.com/path") else {return}
let headers = ["Origin":"https://mysocketurl.com"]
self.client = ActionCableClient(url: urlString, headers:headers)
self.client?.willConnect = {
print("Will Connect")
}
self.client?.onConnected = {
print("Connected to \(String(describing: self.client?.url))")
print("Client = \(String(describing: self.client))")
self.createChannel()
}
self.client?.onDisconnected = {(error: ConnectionError?) in
print("Disconected with error: \(String(describing: error))")
}
self.client?.willReconnect = {
print("Reconnecting to \(String(describing: self.client?.url))")
return true
}
self.client?.onPing = {
guard let channel = self.channel else {return}
print("Ping received = \(String(describing: channel))")
}
}
func createChannel(){
let room_identifier = ["room_id" : roomID]
self.channel = client?.create("MyChannel", identifier: room_identifier)
self.channel?.onSubscribed = {
print("Subscribed to \(self.ChannelIdentifier) with simulation Id = \(self.simulationID)")
}
self.channel?.onReceive = {(data: Any?, error: Error?) in
print("****** channel response data = \(String(describing: data))")
if let error = error {
print(error.localizedDescription)
return
}
}
self.channel?.onUnsubscribed = {
print("Unsubscribed")
}
self.channel?.onRejected = {
print("Rejected")
}
}
现在我正在尝试迁移到 starscream 以解决此问题。但我不太确定如何在下面设置它是我的启动代码。
func setupStarScream() {
var request = URLRequest(url: URL(string: "wss://mysocketurl.com/path")!)
request.httpMethod = "POST"
request.timeoutInterval = 5
socket = WebSocket(request: request)
socket.delegate = self
socket.connect()
}
这总是给我一个 "Invalid HTTP upgrade"
错误。可能是因为我没有像动作电缆那样添加原点和通道细节。但我不知道如何在这里添加它。感谢任何帮助。
试试这个
func setupStarScream(){
var request = URLRequest(url: URL(string: "wss://mysocketurl.com/path")!)
request.addValue("https://mysocketurl.com", forHTTPHeaderField: "Origin")
socket = WebSocket(request: request)
socket?.delegate = self
socket.connect()
}
连接后创建这样的频道
func websocketDidConnect(socket: WebSocketClient) {
print("websocket is connected")
createChannel()
}
func createChannel()
{
let strChannel = "{ \"channel\": \"MyChannel\",\"room_id\": \"\(roomID)\" }"
let message = ["command" : "subscribe","identifier": strChannel]
do {
let data = try JSONSerialization.data(withJSONObject: message)
if let dataString = String(data: data, encoding: .utf8){
self.socket?.write(string: dataString)
}
} catch {
print("JSON serialization failed: ", error)
}
}
目前我正在使用 Action Cable client 连接到 URL 并订阅频道。但是图书馆似乎有一些问题,因为它偶尔无法订阅频道。以下是我当前的 Action cable 客户端设置代码
func setupActionCable(){
guard let urlString = URL(string: "wss://mysocketurl.com/path") else {return}
let headers = ["Origin":"https://mysocketurl.com"]
self.client = ActionCableClient(url: urlString, headers:headers)
self.client?.willConnect = {
print("Will Connect")
}
self.client?.onConnected = {
print("Connected to \(String(describing: self.client?.url))")
print("Client = \(String(describing: self.client))")
self.createChannel()
}
self.client?.onDisconnected = {(error: ConnectionError?) in
print("Disconected with error: \(String(describing: error))")
}
self.client?.willReconnect = {
print("Reconnecting to \(String(describing: self.client?.url))")
return true
}
self.client?.onPing = {
guard let channel = self.channel else {return}
print("Ping received = \(String(describing: channel))")
}
}
func createChannel(){
let room_identifier = ["room_id" : roomID]
self.channel = client?.create("MyChannel", identifier: room_identifier)
self.channel?.onSubscribed = {
print("Subscribed to \(self.ChannelIdentifier) with simulation Id = \(self.simulationID)")
}
self.channel?.onReceive = {(data: Any?, error: Error?) in
print("****** channel response data = \(String(describing: data))")
if let error = error {
print(error.localizedDescription)
return
}
}
self.channel?.onUnsubscribed = {
print("Unsubscribed")
}
self.channel?.onRejected = {
print("Rejected")
}
}
现在我正在尝试迁移到 starscream 以解决此问题。但我不太确定如何在下面设置它是我的启动代码。 func setupStarScream() {
var request = URLRequest(url: URL(string: "wss://mysocketurl.com/path")!)
request.httpMethod = "POST"
request.timeoutInterval = 5
socket = WebSocket(request: request)
socket.delegate = self
socket.connect()
}
这总是给我一个 "Invalid HTTP upgrade"
错误。可能是因为我没有像动作电缆那样添加原点和通道细节。但我不知道如何在这里添加它。感谢任何帮助。
试试这个
func setupStarScream(){
var request = URLRequest(url: URL(string: "wss://mysocketurl.com/path")!)
request.addValue("https://mysocketurl.com", forHTTPHeaderField: "Origin")
socket = WebSocket(request: request)
socket?.delegate = self
socket.connect()
}
连接后创建这样的频道
func websocketDidConnect(socket: WebSocketClient) {
print("websocket is connected")
createChannel()
}
func createChannel()
{
let strChannel = "{ \"channel\": \"MyChannel\",\"room_id\": \"\(roomID)\" }"
let message = ["command" : "subscribe","identifier": strChannel]
do {
let data = try JSONSerialization.data(withJSONObject: message)
if let dataString = String(data: data, encoding: .utf8){
self.socket?.write(string: dataString)
}
} catch {
print("JSON serialization failed: ", error)
}
}