我一直在嘗試創建一個腳本,根據用戶的喜好顯示位元幣和以太坊的價格。因此,如果用戶點擊位元幣按鈕,它會顯示位元幣價格,而當用戶點擊以太坊按鈕時,它會顯示以太坊。
一切正常,但是當您單擊位元幣按鈕然后單擊以太坊按鈕時,它會產生沖突并不斷在位元幣和以太坊價格之間切換。
我試過用
價格Ws1.close(); 和價格Ws.close(); 但它完全關閉了 1 個 websocket,你不能在價格之間交換。
Javascript
const pricesWs = new WebSocket('wss://ws.coincap.io/prices?assets=bitcoin')
const pricesWs1 = new WebSocket('wss://ws.coincap.io/prices?assets=ethereum')
$(document).ready(function() {
$('.buttonbtc').click(function(e) {
pricesWs.onmessage = function (msg) {
var str = msg.data
var matches = str.match (/\b\d (?:.\d )?/);
var finalprice = parseFloat(matches);
document.getElementById("btc").innerHTML = finalprice;
}
});
});
$(document).ready(function() {
$('.buttoneth').click(function(e) {
pricesWs1.onmessage = function (msgg) {
var str = msgg.data
var matches = str.match (/\b\d (?:.\d )?/);
var finalprice = parseFloat(matches);
document.getElementById("btc").innerHTML = finalprice;
}
});
});
現場演示:https://jsfiddle.net/s9rv1agu/
uj5u.com熱心網友回復:
問題似乎是您從 coinbase 服務器收到持續的回應訊息。您可以防止文本顯示在訊息上更新,除非發送它的套接字與上次單擊的按鈕匹配。
在這種情況下,我將上次單擊按鈕的值存盤在名為 cp 的變數中,并且僅在訊息由相應的套接字發送時更新訊息的顯示。
代碼:
const pricesWs = new WebSocket('wss://ws.coincap.io/prices?assets=bitcoin')
const pricesWs1 = new WebSocket('wss://ws.coincap.io/prices?assets=ethereum');
var cp = -1;//current_price
$(document).ready(function() {
$('.buttonbtc').click(function(e) {
cp = 0;
document.getElementById("btc").innerHTML = "pending...";
pricesWs.onmessage = function (msg) {
if(cp == 0) {
var str = msg.data
var matches = str.match (/\b\d (?:.\d )?/);
var finalprice = parseFloat(matches);
document.getElementById("btc").innerHTML = finalprice;
}
}
});
});
$(document).ready(function() {
$('.buttoneth').click(function(e) {
cp = 1;
document.getElementById("btc").innerHTML = "pending...";
pricesWs1.onmessage = function (msgg) {
if(cp == 1) {
var str = msgg.data
var matches = str.match (/\b\d (?:.\d )?/);
var finalprice = parseFloat(matches);
document.getElementById("btc").innerHTML = finalprice;
}
}
});
});
但是,如果您還想停止問題的根本原因(服務器發送的持續訊息),您將需要初始化套接字連接并在訊息后關閉連接(或者可能是一些只發回 coinbase 的配置) 1 條訊息)。
var pricesWs;
var pricesWs1;
const wlist = ['wss://ws.coincap.io/prices?assets=bitcoin',
'wss://ws.coincap.io/prices?assets=ethereum'];
var cp = -1;//current_price
$(document).ready(function() {
$('.buttonbtc').click(function(e) {
cp = 0;
document.getElementById("btc").innerHTML = "pending...";
pricesWs = new WebSocket(wlist[0]);
pricesWs.onopen = function() {
pricesWs.onmessage = function (msg) {
if(cp == 0) {
var str = msg.data
var matches = str.match (/\b\d (?:.\d )?/);
var finalprice = parseFloat(matches);
document.getElementById("btc").innerHTML = finalprice;
}
pricesWs.close();
}
}
});
});
$(document).ready(function() {
$('.buttoneth').click(function(e) {
cp = 1;
document.getElementById("btc").innerHTML = "pending...";
pricesWs1 = new WebSocket(wlist[1]);
pricesWs1.onopen = function() {
pricesWs1.onmessage = function (msgg) {
if(cp == 1) {
var str = msgg.data
var matches = str.match (/\b\d (?:.\d )?/);
var finalprice = parseFloat(matches);
document.getElementById("btc").innerHTML = finalprice;
}
pricesWs1.close();
}
}
});
});
還可以添加額外的檢查以確保單擊按鈕時套接字不在打開程序中
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/343488.html
標籤:javascript 接口 网络套接字 加密货币
