Latest 1.1.0
Homepage https://github.com/GlebRadchenko/DNWebSocket
License MIT
Platforms ios 8.0, osx 10.10, tvos 9.0, watchos 2.0
Authors


Swift 4.0


MIT

Object-Oriented, Swift-style WebSocket Library (Tests

  • Installation
  • Requirements
  • Usage
  • 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 = []
    

    Latest podspec

    {
        "name": "DNWebSocket",
        "version": "1.1.0",
        "summary": "Pure Swift WebSocket Library",
        "description": "Object-Oriented, Swift-style WebSocket Library (RFC 6455) for Swift-compatible Platforms.nConforms to all necessary Autobahn fuzzing tests.",
        "homepage": "https://github.com/GlebRadchenko/DNWebSocket",
        "license": {
            "type": "MIT",
            "file": "LICENSE"
        },
        "authors": {
            "Gleb Radchenko": "[email protected]"
        },
        "source": {
            "git": "https://github.com/GlebRadchenko/DNWebSocket.git",
            "tag": "1.1.0"
        },
        "swift_version": "4.2",
        "platforms": {
            "ios": "8.0",
            "osx": "10.10",
            "tvos": "9.0",
            "watchos": "2.0"
        },
        "source_files": "Sources/**/*.swift",
        "pod_target_xcconfig": {
            "SWIFT_INCLUDE_PATHS": "$(PODS_TARGET_SRCROOT)/Sources/CZLib/**"
        },
        "preserve_paths": "Sources/CZLib/**"
    }

    Pin It on Pinterest

    Share This