Socket.on(event, callback)
注意
存在一个具有更好且符合标准的 API 的模块。
新的 k6/experimental/websockets API 部分实现了 WebSockets API 活标准。
在可能的情况下,我们建议使用新的 API。它使用全局事件循环,与其他 k6 API 保持一致,并具有更好的性能。
为 WebSocket 连接上的各种事件设置回调函数。同一个事件可以定义多个处理程序。
参数 | 类型 | 描述 |
---|---|---|
event | string | 要定义回调的事件名称。 |
callback | function | 事件发生时调用的函数。 |
事件名称 | 描述 |
---|---|
打开 | 连接建立时触发 |
message | 从服务器接收到消息时触发。 |
ping | 从服务器接收到 ping 时触发。客户端会自动发回一个 pong 。 |
pong | 从服务器接收到 pong 时触发。 |
close | 客户端通过 Socket.close() 关闭连接时触发,或者服务器发送状态码为 1000 (正常关闭) 的 close 事件时触发。 |
error | 发生错误时触发。非正常关闭错误将被转发。 |
示例
import ws from 'k6/ws';
import { check } from 'k6';
export default function () {
const url = 'ws://echo.websocket.org';
const params = { tags: { my_tag: 'hello' } };
const response = ws.connect(url, params, function (socket) {
socket.on('open', function open() {
console.log('connected');
socket.send(Date.now());
socket.setInterval(function timeout() {
socket.ping();
console.log('Pinging every 1sec (setInterval test)');
}, 1000);
});
socket.on('ping', function () {
console.log('PING!');
});
socket.on('pong', function () {
console.log('PONG!');
});
socket.on('pong', function () {
// Multiple event handlers on the same event
console.log('OTHER PONG!');
});
socket.on('message', function (message) {
console.log(`Received message: ${message}`);
});
socket.on('close', function () {
console.log('disconnected');
});
socket.on('error', function (e) {
if (e.error() != 'websocket: close sent') {
console.log('An unexpected error occured: ', e.error());
}
});
socket.setTimeout(function () {
console.log('2 seconds passed, closing the socket');
socket.close();
}, 2000);
});
check(response, { 'status is 101': (r) => r && r.status === 101 });
}