WebSocket 收集回调

WebSocket collect callbacks

本文关键字:回调 WebSocket      更新时间:2024-06-12
$('#ws-show-log').click(function(){
  var webSocket = new WebSocket('ws://myhost.loc:8080');
  webSocket.onopen = function() {
    console.log('onopen');
  };
  webSocket.onmessage = function(event) {
    console.log('onmessage: ' + event.data);
  };
  webSocket.onclose = function() {
    console.log('onclose');
  };
  webSocket.onerror = function() {
    console.log('onerror');
  };
});

当我单击 #ws-show-log时 - 我看到来自webSocket运河的所有消息:

onopen
onmessage message1
onmessage message2

但是当我在控制台中第二次单击 #ws 显示登录时,所有消息都是重复的,我看到:

onopen
onmessage message1
onmessage message1
onmessage message2
onmessage message2

如果你想建立一次与websocket的连接,你可以使用jQuery的once((处理程序。

像这样使用它

$('#ws-show-log').once('click', function() {
    // inner code
 }
如果要在每次单击时都与

服务器建立新连接 #ws-show-log ,则应在使用后关闭连接。否则,连接将保持打开状态,每次单击#ws-show-log都会导致与您的服务器的额外连接。

您可以使用 webSocket.close(); 关闭 WebSocket。您可以将此关闭函数放在onmessage处理程序中。现在,当您收到来自服务器的消息时,WebSocket 将被关闭。

你可以这样做:

webSocket.onmessage = function(event) {
    console.log('onmessage: ' + event.data);
    webSocket.close();
};

thnx@David,但在创建新连接之前,所有连接在关闭旧连接时都可以工作。

var webSocket;
$('#ws-show-log').click(function(){
  if (webSocket) webSocket.close();
  webSocket = new WebSocket('ws://myhost.loc:8080');
  webSocket.onopen = function() {
    console.log('onopen');
  };
  webSocket.onmessage = function(event) {
    console.log('onmessage: ' + event.data);
  };
  webSocket.onclose = function() {
    console.log('onclose');
  };
  webSocket.onerror = function() {
    console.log('onerror');
  };
});