websocket传输----stomp.js

2,362 阅读1分钟

心跳起搏器--stomp.js

应用场景 stomp官网地址

当我们需要不间断的给服务器发请求的时候一般有两种解决方案,一种是平时的http做轮询去请求,还有一种是使用webSocket来解决,轮询虽然可以解决双向通讯的问题,但是也有一些他本身的缺点,轮询间隔大了则信息不够实时,轮询间隔过小又会消耗过多的流量,增加服务器的负担。所以我们可以适当的去研究运用一下webSocket,这个时候就可以使用stomp.js这个库了

引入方式

    npm i @stomp/stompjs

或者

    <https://cdn.jsdelivr.net/npm/@stomp/stompjs@5.0.0/bundles/stomp.umd.min.js>
    <https://cdn.jsdelivr.net/npm/@stomp/stompjs@5.0.0/bundles/stomp.umd.js>

使用 Client

    import { Client, Message } from '@stomp/stompjs';
最简单的使用方式
    const client = new StompJs.Client();
    client.brokerURL = 'ws://localhost:15674/ws';
    console.log(client.brokerURL);
或者创建一个client
    const client = new StompJs.Client({
      brokerURL: 'ws://localhost:15674/ws',
      connectHeaders: {
        login: 'user',
        passcode: 'password',
      },
      reconnectDelay: 5000, // 重连时间
      heartbeatIncoming: 4000, // 进入时间
      heartbeatOutgoing: 4000, // 退出时间
    });

    client.onConnect = function (frame) {
      // 可以在链接成功以后去订阅消息
    };

    };

    client.activate(); // 启动websocket
停止链接 deactivate
    client.deactivate();
发送消息 publish
    client.publish({
      destination: '/topic/general',
      body: 'Hello world',
      headers: { priority: '9' },
    });
订阅消息(一般在onConnect中使用) subscribe
    const subscription = client.subscribe('/queue/test', callback);

订阅以后只要有消息就可以在callback会调中获取到服务器发送回来的消息

    callback = function (message) {
        console.log(message)
    };

当然也可以在订阅方法中传header,传入第三个参数

    const headers = { ack: 'client' };
    client.subscribe('/queue/test', message_callback, headers);

取消订阅 unsubscribe

    subscription.unsubscribe();

效果

我们只需要打开F12,观察socket通讯就完成我们的工作啦

image.png