簡體   English   中英

選擇選項時關閉多個WebSocket連接

[英]close multiple websockets connections when option selected

我有一個文本框,用戶可以在其中開始輸入字母。 如果數據庫中存在相對詞,則它們會顯示在文本框下方的dropdown中。

為了搜索數據庫並返回結果,我使用了websockets(nodejs 0.10.12和javascript)

所以代碼就像這樣

//something is typed , so call the function, to send data and make query
<input id="typename" type="text"  onKeyUp="lookup();" >


//this is where I send data and get back results
function lookup(){
  var so=new WebSocket("ws://localhost:1234");

  so.onerror=function (evt) {alert('Error');}

  so.onopen=function(){
     so.send(document.getElementById("typename").value) 
  }

  so.onmessage = function (evt) {
      var received_msg = evt.data;
      var packet = JSON.parse(received_msg);
      so.close();   
      //feed results to dropdown.....
  }

}

這將轉換為根據用戶類型打開和關閉的多個連接。

即使用戶從下拉列表中選擇內容,連接仍會在后台打開和關閉。 因為如果我輸入例如4個字母,則打開/關閉將為4。

如果我立即選擇想要的內容,則背景中仍然有2或3個連接(打開和關閉)。 他們仍然提供結果。 這意味着,實際上,不要讓我選擇我想要的東西。 我必須一遍又一遍地挑選它。 (下降閃爍)而且,如果我編輯它並想將其保存回數據庫,則不能,因為仍然有連接在運行,因此我無法打開新的連接來保存它。 代碼正在等待...

我該怎么做

<select id="listout" size="5"  onChange="so.close();"  >  </select> 

停止在后台運行的連接? 上面的方法不起作用。 即使我設置so是全球性的或沒有全球性的。 無法正常工作,因為我可以看到多個連接同時打開,但沒有關閉。 我必須刷新頁面,以便它們都可以關閉。

有什么建議嗎?

當下拉列表中的某些內容發生更改(=用戶選擇了某些內容)時,如何關閉所有連接?

提前致謝

附言:謹此致歉。 思想將幫助您更好地理解問題或提供替代方案

要關閉打開的連接,您需要在創建它們時在它們上保存指針,例如:

//global variable for store opened connections
var aPoolWSConections = []

function lookup(){
    var so=new WebSocket("ws://localhost:1234");
    //
    // your code here
    //
    // at the end
    aPoolWSConections.push(so);
}    

實現將關閉連接的功能。

function closePoolWSConections(){
    var iSo = aPoolWSConections.length;
    while(iSo--){
        aPoolWSConections[iSo].close();
    }
    aPoolWSConections = [];
}

在必要的時間調用一個函數。

<select id="listout" size="5"  onChange="closePoolWSConections();"  >  </select>

但是我不建議您為應用程序打開許多連接就足夠了一個websocket連接。

//Create one global WS connection
var so = new WebSocket("ws://localhost:1234");

so.onmessage = function (evt) {
    var received_msg = evt.data;
    var packet = JSON.parse(received_msg);
    //feed results to dropdown.....
}

function lookup(){
    //maybe should check if it still open
    so.send(document.getElementById("typename").value);
}

//and you can use something like
<select id="listout" size="5"  onChange="so.close();"  >  </select>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM