我正在尝试将websockets与Javascript一起使用,但我发现在连接失败后重新打开它的速度很慢:
function start_socket() {
var ws = new WebSocket("ws://localhost:8000");
ws.onopen = function() {
console.log("Socket opened");
};
ws.onmessage = function(e) {
console.log("Received message: " + e.data);
};
ws.onclose = function(e) {
start_socket();
};
}
start_socket();
我在localhost:8000
上有一个非常简单的服务器,它在接收到连接后才发回一条消息。如果执行脚本时服务器已经在运行,则可以立即工作,但是如果我启动脚本然后启动服务器,则可能需要花费几秒钟来获取消息。
我尝试了另一个版本:
var ntries = 0;
function start_socket() {
ws = new WebSocket("ws://localhost:8000");
ws.onopen = function() {
console.log("Socket opened");
};
ws.onmessage = function(e) {
console.log("Received message: " + e.data);
};
ws.onclose = function(e) {
ntries++;
console.log(ntries);
start_socket();
};
}
start_socket();
在此版本中,我可以在日志中看到重试的数量相对缓慢地增加(有时在最后一次重试之后立即进行一次重试,有时需要几秒钟)。
最终版本:
var ntries = 0;
var is_open = false;
function start_socket() {
ws = new WebSocket("ws://localhost:8000");
ws.onopen = function() {
is_open = true;
console.log("Socket opened");
};
ws.onmessage = function(e) {
console.log("Received message: " + e.data);
};
ws.onclose = function(e) {
is_open = false;
ntries++;
console.log(ntries);
start_socket();
};
setTimeout(function() {
if(! is_open)
ws.close();
}, 500);
}
start_socket();
此处,重试次数每500毫秒按预期增加,但是在连接到服务器之前需要进行多次重试。有时候,即使服务器发送了消息,我什至都没有得到消息。