CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-ktor--ktor-client-websockets-iosx64

Ktor client WebSocket plugin for iOS x64 target providing WebSocket client capabilities for iOS simulator applications using Kotlin Multiplatform.

Pending
Overview
Eval results
Files

plugin-configuration.mddocs/

Plugin Configuration

WebSocket plugin installation and configuration including ping intervals, frame size limits, content converters, and extension support.

Required Imports

import io.ktor.client.*
import io.ktor.client.plugins.websocket.*
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds

Capabilities

Plugin Installation

Install the WebSockets plugin in your HttpClient configuration.

/**
 * Installs the WebSockets plugin using the provided configuration block
 * @param config Configuration block for setting up WebSocket options
 */
fun HttpClientConfig<*>.WebSockets(config: WebSockets.Config.() -> Unit)

Usage Examples:

val client = HttpClient {
    install(WebSockets) {
        pingInterval = 30.seconds
        maxFrameSize = 1024 * 1024 // 1MB
    }
}

// Or using the configuration function
val client = HttpClient {
    WebSockets {
        pingInterval = 30.seconds
        maxFrameSize = 1024 * 1024
    }
}

WebSockets Plugin Class

The main plugin class containing configuration and behavior.

/**
 * Client WebSocket plugin providing WebSocket communication capabilities
 * @param pingIntervalMillis Interval between ping messages in milliseconds
 * @param maxFrameSize Maximum size of a single WebSocket frame in bytes
 * @param contentConverter Optional converter for serialization/deserialization
 */
class WebSockets(
    val pingIntervalMillis: Long,
    val maxFrameSize: Long,
    val contentConverter: WebsocketContentConverter? = null
) {
    constructor()
    constructor(pingIntervalMillis: Long, maxFrameSize: Long)
    
    companion object Plugin : HttpClientPlugin<Config, WebSockets>
}

Duration-Based Constructor

Create WebSockets instance with Duration-based ping configuration.

/**
 * Creates WebSockets plugin instance with Duration-based ping interval
 * @param pingInterval Interval between ping messages, null to disable
 * @param maxFrameSize Maximum frame size in bytes
 * @return Configured WebSockets instance
 */
fun WebSockets(
    pingInterval: Duration?,
    maxFrameSize: Long = Int.MAX_VALUE.toLong()
): WebSockets

Configuration Class

Configuration options for the WebSockets plugin.

/**
 * Configuration class for WebSockets plugin
 */
class Config {
    /** Ping interval in milliseconds, use PINGER_DISABLED to disable */
    var pingIntervalMillis: Long
    
    /** Ping interval as Duration, null to disable pinger */
    var pingInterval: Duration?
    
    /** Maximum frame size in bytes */
    var maxFrameSize: Long
    
    /** Content converter for serialization/deserialization */
    var contentConverter: WebsocketContentConverter?
    
    /**
     * Configure WebSocket extensions
     * @param block Configuration block for WebSocket extensions
     */
    fun extensions(block: WebSocketExtensionsConfig.() -> Unit)
}

Usage Examples:

install(WebSockets) {
    // Set ping interval using Duration
    pingInterval = 20.seconds
    
    // Set ping interval using milliseconds
    pingIntervalMillis = 20000L
    
    // Disable ping
    pingInterval = null
    // or
    pingIntervalMillis = PINGER_DISABLED
    
    // Set maximum frame size
    maxFrameSize = 1024 * 1024 // 1MB
    
    // Configure content converter
    contentConverter = KotlinxWebsocketSerializationConverter(Json)
    
    // Configure extensions
    extensions {
        // Extension configuration
    }
}

Extension Properties

Additional properties for convenient configuration.

/**
 * Gets ping interval as Duration from WebSockets instance
 * @return Duration or null if ping is disabled
 */
val WebSockets.pingInterval: Duration?

/**
 * Sets/gets ping interval as Duration in WebSockets configuration
 */
var WebSockets.Config.pingInterval: Duration?

Constants

Ping Configuration

/**
 * Constant indicating ping is disabled
 */
const val PINGER_DISABLED: Long = 0

Engine Capabilities

WebSocket Support Indicators

/**
 * Indicates if a client engine supports WebSockets
 */
data object WebSocketCapability : HttpClientEngineCapability<Unit>

/**
 * Indicates if a client engine supports WebSocket extensions
 */
data object WebSocketExtensionsCapability : HttpClientEngineCapability<Unit>

Configuration Examples

Basic Configuration

val client = HttpClient {
    install(WebSockets)
}

Advanced Configuration

val client = HttpClient {
    install(WebSockets) {
        // Enable ping every 30 seconds
        pingInterval = 30.seconds
        
        // Set max frame size to 1MB
        maxFrameSize = 1024 * 1024
        
        // Add content converter for JSON serialization
        contentConverter = KotlinxWebsocketSerializationConverter(Json {
            prettyPrint = true
            ignoreUnknownKeys = true
        })
        
        // Configure extensions if needed
        extensions {
            // Extension-specific configuration
        }
    }
}

Platform-Specific Notes

For iOS x64 applications, the WebSocket implementation uses the native iOS WebSocket capabilities optimized for iOS simulator environments. The configuration options work identically across all platforms, with platform-specific optimizations handled internally.

Install with Tessl CLI

npx tessl i tessl/maven-io-ktor--ktor-client-websockets-iosx64

docs

index.md

message-serialization.md

plugin-configuration.md

session-management.md

websocket-connections.md

tile.json