这对我来说是一个很新的问题,所以如果这是一个愚蠢/明显的问题,请原谅我。
我的服务器上有一个web套接字。我发送了大约40个jpeg作为字节数组(大约为1个字节)。每秒12kb的大小。
在客户端,我将图像显示在画布控件上。
每个JPEG上都有一个时间戳水印。
每隔一段时间,时间戳开始滞后于当前系统时间。
有时几分钟前。
我更愿意在客户端确定这种延迟是否存在,然后以某种方式刷新web套接字。
这可能吗?
感谢另外有人向我指出,只要断开连接并重新连接,就可以清除套接字中的虚消息。
下面的代码显示了如果失去连接,我的客户端如何重新连接。我必须把这个放在这里,以防我没有从服务器接收到断开连接:
function Reconnect() {
try {
ws = new WebSocket(url);
ws.binaryType = 'arraybuffer';
ws.onerror = function (e) {
try {
console.log('onerror');
}
catch (err) {
console.log(err);
}
};
ws.onclose = function () {
try {
Reconnect();
}
catch (err) {
console.log(err);
}
};
ws.onopen = function () {
try {
StartPing();
console.log('onopen');
}
catch (err) {
console.log(err);
}
};
ws.onmessage = function (e) {
try{
''display image on canvas
}
catch (err) {
console.log(err);
}
}
};
}
catch (err) {
Reconnect();
}
}
function StartPing() {
try{
window.clearInterval(window.timerID);
if (!window.timerID) { /* avoid firing a new setInterval, after one has been done */
window.timerID = setInterval(Ping, 20000);
}
}
catch (err)
{
console.log(err + ' Reconnect');
}
}
function Ping() {
try {
var now = new Date();
var d = now.format("yyyymmddhhMMss");
var currentTimeStamp = d + '000';
if (parseInt(currentTimeStamp) - parseInt(lastUpdated) < 60) {
console.log('Reconnect');
Reconnect();
}
else {
StartPing();
}
}
catch (err) {
console.log(err + ' Ping');
}
你应该确保在连接一个新的WebSocket之前关闭你的旧WebSocket,否则你会得到多个同时打开的连接,这不是你想要的(当你试图理解发生了什么时,会把你扔出去)。
在你的Reconnect函数中,执行:
function Reconnect() {
try {
// ws is probably some global variable, so:
if(ws instanceof WebSocket)
ws.close();
ws = new WebSocket(url);
ws.binaryType = 'arraybuffer';
// Rest of code...