useWebSocket
响应式 WebSocket 客户端。
用法
js
import { useWebSocket } from '@vueuse/core'
const { status, data, send, open, close } = useWebSocket('ws://websocketurl')
查看 类型声明 以获取更多选项。
immediate
默认启用。
在调用 composable 时立即建立连接。
autoConnect
默认启用。
如果 url 作为 ref 提供,当 url 更改时,它将自动重新连接到新 url。
autoClose
默认启用。
当 beforeunload
事件被触发或关联的效果作用域停止时,这将自动调用 close()
。
autoReconnect
在错误发生时自动重新连接(默认禁用)。
js
const { status, data, close } = useWebSocket('ws://websocketurl', {
autoReconnect: true,
})
或对行为进行更多控制
js
const { status, data, close } = useWebSocket('ws://websocketurl', {
autoReconnect: {
retries: 3,
delay: 1000,
onFailed() {
alert('Failed to connect WebSocket after 3 retries')
},
},
})
显式调用 close()
不会触发自动重新连接。
heartbeat
通常的做法是每隔一段时间发送一条小消息(心跳)以保持连接活动。在此函数中,我们提供了一个方便的助手来执行此操作
js
const { status, data, close } = useWebSocket('ws://websocketurl', {
heartbeat: true,
})
或进行更多控制
js
const { status, data, close } = useWebSocket('ws://websocketurl', {
heartbeat: {
message: 'ping',
interval: 1000,
pongTimeout: 1000,
},
})
子协议
要使用的一个或多个子协议的列表,在本例中为 soap 和 wamp。
js
import { useWebSocket } from '@vueuse/core'
const { status, data, send, open, close } = useWebSocket('ws://websocketurl', {
protocols: ['soap'], // ['soap', 'wamp']
})
类型声明
显示类型声明
typescript
export type WebSocketStatus = "OPEN" | "CONNECTING" | "CLOSED"
export type WebSocketHeartbeatMessage = string | ArrayBuffer | Blob
export interface UseWebSocketOptions {
onConnected?: (ws: WebSocket) => void
onDisconnected?: (ws: WebSocket, event: CloseEvent) => void
onError?: (ws: WebSocket, event: Event) => void
onMessage?: (ws: WebSocket, event: MessageEvent) => void
/**
* Send heartbeat for every x milliseconds passed
*
* @default false
*/
heartbeat?:
| boolean
| {
/**
* Message for the heartbeat
*
* @default 'ping'
*/
message?: MaybeRefOrGetter<WebSocketHeartbeatMessage>
/**
* Response message for the heartbeat, if undefined the message will be used
*/
responseMessage?: MaybeRefOrGetter<WebSocketHeartbeatMessage>
/**
* Interval, in milliseconds
*
* @default 1000
*/
interval?: number
/**
* Heartbeat response timeout, in milliseconds
*
* @default 1000
*/
pongTimeout?: number
}
/**
* Enabled auto reconnect
*
* @default false
*/
autoReconnect?:
| boolean
| {
/**
* Maximum retry times.
*
* Or you can pass a predicate function (which returns true if you want to retry).
*
* @default -1
*/
retries?: number | ((retried: number) => boolean)
/**
* Delay for reconnect, in milliseconds
*
* @default 1000
*/
delay?: number
/**
* On maximum retry times reached.
*/
onFailed?: Fn
}
/**
* Immediately open the connection when calling this composable
*
* @default true
*/
immediate?: boolean
/**
* Automatically connect to the websocket when URL changes
*
* @default true
*/
autoConnect?: boolean
/**
* Automatically close a connection
*
* @default true
*/
autoClose?: boolean
/**
* List of one or more sub-protocol strings
*
* @default []
*/
protocols?: string[]
}
export interface UseWebSocketReturn<T> {
/**
* Reference to the latest data received via the websocket,
* can be watched to respond to incoming messages
*/
data: Ref<T | null>
/**
* The current websocket status, can be only one of:
* 'OPEN', 'CONNECTING', 'CLOSED'
*/
status: ShallowRef<WebSocketStatus>
/**
* Closes the websocket connection gracefully.
*/
close: WebSocket["close"]
/**
* Reopen the websocket connection.
* If there the current one is active, will close it before opening a new one.
*/
open: Fn
/**
* Sends data through the websocket connection.
*
* @param data
* @param useBuffer when the socket is not yet open, store the data into the buffer and sent them one connected. Default to true.
*/
send: (data: string | ArrayBuffer | Blob, useBuffer?: boolean) => boolean
/**
* Reference to the WebSocket instance.
*/
ws: Ref<WebSocket | undefined>
}
/**
* Reactive WebSocket client.
*
* @see https://vueuse.org.cn/useWebSocket
* @param url
*/
export declare function useWebSocket<Data = any>(
url: MaybeRefOrGetter<string | URL | undefined>,
options?: UseWebSocketOptions,
): UseWebSocketReturn<Data>
来源
贡献者
更新日志
v12.8.0
于 2025/3/5v12.4.0
于 2025/1/10v12.3.0
于 2025/1/259f75
- feat(toValue): 弃用来自 @vueuse/shared
的 toValue
,支持 Vue 的原生类型v12.2.0-beta.1
于 2024/12/23v12.1.0
于 2024/12/22v12.0.0-beta.1
于 2024/11/21v11.2.0
于 2024/10/30v11.0.2
于 2024/8/24v11.0.0-beta.2
于 2024/7/17v10.10.0
于 2024/5/27v10.8.0
于 2024/2/20v10.6.0
于 2023/11/9v10.5.0
于 2023/10/7v10.4.0
于 2023/8/25v10.0.0-beta.4
于 2023/4/134d757
- feat(types)!: 将 MaybeComputedRef
重命名为 MaybeRefOrGetter
10e98
- feat(toRef)!: 将 resolveRef
重命名为 toRef
v9.12.0
于 2023/1/29