Popularity
1.0
Growing
Activity
0.0
Stable
36
1
4

Programming language: Swift
License: MIT License
Tags: Network     Socket    
Latest version: v4.0

DNWebSocket alternatives and similar libraries

Based on the "Socket" category.
Alternatively, view DNWebSocket alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of DNWebSocket or a related project?

Add another 'Socket' Library

README

DNWebSocket

Object-Oriented, Swift-style WebSocket Library (RFC 6455) for Swift-compatible Platforms.

Tests

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)

Installation

Cocoapods

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.

Swift Package Manager

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.

Requirements

  • 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)

Usage

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 = []


*Note that all licence references and agreements mentioned in the DNWebSocket README section above are relevant to that project's source code only.