Object-Oriented, Swift-style WebSocket Library (RFC 6455) for Swift-compatible Platforms.
Conforms to all necessary Autobahn fuzzing tests. Autobahn
Test results for DNWebSocket you can see here.
In comparison with SocketRocket, this library shows 2-10 times better performance in many Limits/Performance tests.
Cases 6.4.1, 6.4.2, 6.4.3, 6.4.4 received result Non-Strict due to perfomance improvements(it's complicated to validate each fragmented text message)
To install DNWebSocket via CocoaPods, get it:
$ gem install cocoapods
Then, create a Podfile
in your project root directory:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
target '<Target Name>' do
pod 'DNWebSocket', '~> 1.1.0'
end
And run:
$ pod install
For swift version < 4.2 use 1.0.2 version of pod.
Currently, I'm looking for a generic approach which will allow to use C libraries with all Package Managers. So right now, please, use DNWebSocket-SPM repo.
- iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
- Swift 4.0 + (but I didn't try earlier versions by the way :D)
Import library as follows:
import DNWebSocket
Now create websocket, configure it and connect:
let websocket = WebSocket(url: URL(string: "wss://echo.websocket.org:80")!,
timeout: 10,
protocols: ["chat", "superchat"])
websocket.onConnect = {
print("connected")
websocket.sendPing(data: Data())
}
websocket.onData = { (data) in
websocket.send(data: data)
}
websocket.onText = { (text) in
websocket.send(string: text)
}
websocket.onPing = { (data) in
websocket.sendPong(data: data)
}
websocket.onPong = { (data) in
print("Received pong from server")
}
websocket.onDebugInfo = { (debugInfo) in
print(debugInfo)
}
websocket.onDisconnect = { (error, closeCode) in
print("disconnected: \(closeCode)")
}
websocket.connect()
You can create custom connection by accessing .settings and .securitySettings properties:
websocket.settings.timeout = 5 // sec
websocket.settings.debugMode = true // will trigger .onDebugInfo callback and send .debug(String) event
websocket.settings.useCompression = true // false by default
websocket.settings.maskOutputData = true // true by default
websocket.settings.respondPingRequestsAutomatically = true // true by default
websocket.settings.callbackQueue = .main
websocket.securitySettings.useSSL = false // true by default
websocket.securitySettings.overrideTrustHostname = true // false by default
websocket.securitySettings.trustHostname = /*your hostname*/
websocket.securitySettings.certificateValidationEnabled = true
websocket.securitySettings.cipherSuites = []