Ktor client WebSocket plugin for iOS x64 target providing WebSocket client capabilities for iOS simulator applications using Kotlin Multiplatform.
—
WebSocket plugin installation and configuration including ping intervals, frame size limits, content converters, and extension support.
import io.ktor.client.*
import io.ktor.client.plugins.websocket.*
import kotlin.time.Duration
import kotlin.time.Duration.Companion.secondsInstall 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
}
}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>
}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()
): WebSocketsConfiguration 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
}
}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?/**
* Constant indicating ping is disabled
*/
const val PINGER_DISABLED: Long = 0/**
* 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>val client = HttpClient {
install(WebSockets)
}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
}
}
}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