useWebSocket
响应式 WebSocket 客户端。
用法
js
import { useWebSocket } from '@vueuse/core'
const { status, data, send, open, close } = useWebSocket('ws://websocketurl')
有关更多选项,请参阅类型声明。
immediate
默认启用。
在调用此组合时立即建立连接。
autoConnect
默认启用。
如果 URL 作为 ref 提供,当 URL 发生变化时,它将自动重新连接到新 URL。
autoClose
默认启用。
当触发 beforeunload
事件或关联的 effect 范围停止时,这将自动调用 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('重试 3 次后无法连接 WebSocket')
},
},
})
显式调用 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
/**
* 每过 x 毫秒发送一次心跳。
*
* @default false
*/
heartbeat?:
| boolean
| {
/**
* 心跳消息
*
* @default 'ping'
*/
message?: MaybeRefOrGetter<WebSocketHeartbeatMessage>
/**
* 心跳的响应消息,如果未定义,将使用该消息
*/
responseMessage?: MaybeRefOrGetter<WebSocketHeartbeatMessage>
/**
* 间隔时间,毫秒为单位
*
* @default 1000
*/
interval?: number
/**
* 心跳响应超时时间,毫秒为单位
*
* @default 1000
*/
pongTimeout?: number
}
/**
* 启用自动重新连接
*
* @default false
*/
autoReconnect?:
| boolean
| {
/**
* 最大重试次数。
*
* 或者你可以传递一个谓词函数(如果要重试,则返回 true)。
*
* @default -1
*/
retries?: number | (() => boolean)
/**
* 重新连接延迟,毫秒为单位
*
* @default 1000
*/
delay?: number
/**
* 当达到最大重试次数时。
*/
onFailed?: Fn
}
/**
* Immediately open the connection when calling this composable
*
* @default true
*/
immediate?: boolean
/**
* 当 URL 发生变化时自动连接到 WebSocket
*
* @default true
*/
autoConnect?: boolean
/**
* 自动关闭连接
*
* @default true
*/
autoClose?: boolean
/**
* 一个或多个子协议字符串的列表
*
* @default []
*/
protocols?: string[]
}
export interface UseWebSocketReturn<T> {
/**
* WebSocket 最新接收到的数据的 ref,可以监听以响应传入的消息
*/
data: Ref<T | null>
/**
* 当前 WebSocket 的状态,只能是以下之一:
* 'OPEN','CONNECTING','CLOSED'
*/
status: Ref<WebSocketStatus>
/**
* 优雅地关闭 WebSocket 连接。
*/
close: WebSocket["close"]
/**
* 重新打开 WebSocket 连接。
* 如果当前连接处于活动状态,将在打开新连接之前关闭它。
*/
open: Fn
/**
* 通过 WebSocket 连接发送数据。
*
* @param data
* @param useBuffer 当套接字尚未打开时,将数据存储到缓冲区并在连接时发送。默认为 true。
*/
send: (data: string | ArrayBuffer | Blob, useBuffer?: boolean) => boolean
/**
* WebSocket 实例的 ref。
*/
ws: Ref<WebSocket | undefined>
}
/**
* 响应式 WebSocket 客户端。
*
* @see https://vueuse.org/useWebSocket
* @param url
*/
export declare function useWebSocket<Data = any>(
url: MaybeRefOrGetter<string | URL | undefined>,
options?: UseWebSocketOptions,
): UseWebSocketReturn<Data>
源码
贡献者
Anthony Fu
一纸忘忧
Fernando Fernández
IlyaL
Ivan Demidov
Shinigami
Anthony Fu
freakbite
Dan Rose
Antério Vieira
RT
SnowGuest
James Garbutt
lavolpecheprogramma
HengJing Wang
Evan
Vanweiping
alipay404
shanyi-front
丶远方
Johann Kellerman
Dan Rose
cn.shperry
azaleta
Mikhailov Nikita
Jelf
Ernest
Roland Doda
Shangbu Li
webfansplz
Jan-Henrik Damaschke
Joacim de la Motte
Alex Kozack
iGalaxyz
更新日志
v12.4.0
on 1/10/2025v12.3.0
on 1/2/202559f75
- feat(toValue): deprecate toValue
from @vueuse/shared
in favor of Vue's nativev12.2.0-beta.1
on 12/23/2024v12.1.0
on 12/22/2024v12.0.0-beta.1
on 11/21/2024v11.2.0
on 10/30/2024v11.0.2
on 8/24/2024v11.0.0-beta.2
on 7/17/2024v10.10.0
on 5/27/2024v10.8.0
on 2/20/2024v10.6.0
on 11/9/2023v10.5.0
on 10/7/2023v10.4.0
on 8/25/2023v10.0.0-beta.4
on 4/13/20234d757
- feat(types)!: rename MaybeComputedRef
to MaybeRefOrGetter
10e98
- feat(toRef)!: rename resolveRef
to toRef
v9.12.0
on 1/29/2023