Conforming WebSocket (RFC 6455) client library implemented in pure Swift.
Test results for SwiftWebSocket. You can compare to the popular Objective-C Library
SwiftWebSocket currently passes all 521 of the Autobahn's fuzzing tests, including strict UTF-8, and message compression.
- High performance.
- TLS / WSS support. Self-signed certificate option.
- The API is modeled after the Javascript API.
- Reads compressed messages (
permessage-deflate). IETF Draft - Send pings and receive pong events.
- Strict UTF-8 processing.
binaryTypeproperty to choose between[UInt8]orNSDatamessages.- Zero asserts. All networking, stream, and protocol errors are routed through the
errorevent.
func echoTest(){
var messageNum = 0
unowned let ws = WebSocket("wss://echo.websocket.org")
let send : ()->() = {
let msg = "\(++messageNum): \(NSDate().description)"
print("send: \(msg)")
ws.send(msg)
}
ws.event.open = {
print("opened")
send()
}
ws.event.close = { code, reason, clean in
print("close")
}
ws.event.error = { error in
print("error \(error)")
}
ws.event.message = { message in
if let text = message as? String {
print("recv: \(text)")
if messageNum == 10 {
ws.close()
} else {
send()
}
}
}
}let request = NSMutableURLRequest(URL: NSURL(string:"ws://url")!)
request.addValue("AUTH_TOKEN", forHTTPHeaderField: "Authorization")
request.addValue("Value", forHTTPHeaderField: "X-Another-Header")
let ws = WebSocket(request: request)v2.3.0+ makes available an optional open method. This will allow for a WebSocket object to be instantiated without an immediate connection to the server. It can also be used to reconnect to a server following the close event.
For example,
let ws = WebSocket()
ws.event.close = { _ in
ws.open() // reopen the socket to the previous url
ws.open("ws://otherurl") // or, reopen the socket to a new url
}
ws.open("ws://url") // call with url
}The compression flag may be used to request compressed messages from the server. If the server does not support or accept the request, then connection will continue as normal, but with uncompressed messages.
let ws = WebSocket("ws://url")
ws.compression.on = truelet ws = WebSocket("ws://url")
ws.allowSelfSignedSSL = true// Allow socket to handle VoIP in the background.
ws.services = [.VoIP, Background] ##Installation (iOS and OS X)
Add the following to your Cartfile:
github "tidwall/SwiftWebSocket"
Then run carthage update.
Follow the current instructions in Carthage's README for up to date installation instructions.
The import SwiftWebSocket directive is required in order to access SwiftWebSocket features.
Add the following to your Podfile:
use_frameworks!
pod 'SwiftWebSocket'Then run pod install with CocoaPods 0.36 or newer.
The import SwiftWebSocket directive is required in order to access SwiftWebSocket features.
###Manually
Copy the SwiftWebSocket\WebSocket.swift file into your project.
You must also add the libz.dylib library. Project -> Target -> Build Phases -> Link Binary With Libraries
There is no need for import SwiftWebSocket when manually installing.
Josh Baker @tidwall
The SwiftWebSocket source code is available under the MIT License.