[英]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.