Javascript WebSocket收集回调

Javascript WebSocket收集回调,javascript,websocket,Javascript,Websocket,单击#ws show log-我会看到来自webSocket的所有消息: $('#ws-show-log').click(function(){ var webSocket = new WebSocket('ws://myhost.loc:8080'); webSocket.onopen = function() { console.log('onopen'); }; webSocket.onmessage = function(event) { console.

单击#ws show log-我会看到来自webSocket的所有消息:

$('#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 in console时,所有消息都被复制,我看到:

onopen
onmessage message1
onmessage message2

如果只想建立一次到websocket的连接,可以使用jQuery的once()处理程序

像这样使用它

onopen
onmessage message1
onmessage message1
onmessage message2
onmessage message2

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

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

您可以这样做:

$('#ws-show-log').once('click', function() {
    // inner code
 }

thnx@David,但在创建新连接之前,关闭旧连接时所有操作都有效

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

这样地?webSocket.onmessage=函数(事件){console.log('onmessage:'+event.data);webSocket.close();};我如何从Websocket获得下一条消息?每次单击“ws show log”都可以获得下一条消息。因为您已经在每次单击时建立到服务器的连接。否,我单击(一次)并查看websocket日志,我希望查看来自websocket的所有消息。好的,我已更改了答案。看看这个方法,我认为它符合你的目的。
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');
  };
});