gpt4 book ai didi

javascript - socket.io 循环在开始时终止

转载 作者:行者123 更新时间:2023-12-02 19:10:41 25 4
gpt4 key购买 nike

我正在构建此功能,用于将小图 block 图像上传到服务器。客户端构建tileBuffer,然后调用fireTiles函数。在这里,我想构建一个基于tileBuffer.length的循环。服务器将处理该控制。因此,我发出 StartAddTiles 并立即通过 AnotherTile 事件从服务器回调。调试器显示我已被服务器调用,并且我看到代码进入了 socket.on('AnotherTile'... 句子。

问题是,当代码到达 AddTile 发出函数时,它会停在那里,什么也不会发生。服务器没有收到请求,循环就终止了。

我的代码哪里出错了?

 function fireTiles (tileBuffer, mapSelected) {

var tiles = tileBuffer.length;
var tBx = 0;

try
{
var socket = io.connect('http://myweb:8080/');

socket.emit('StartAddTiles', tiles, mapSelected);
socket.on('AnotherTile', function (tlN){
if (tlN < tiles) {
var data = tileBuffer[tlN]; //uso tlN per far comandare il server
tBx++; // debug purpose
socket.emit('AddTile', mapSelected, data, tBx);
} else {
// something went wrong
alert('Error calculating tiles');
return;
}
});
}
catch(err)
{
document.getElementById('status').innerHTML = err.message;
}


}

这是服务器端:

io.sockets.on('connection', function(client) {
console.log('Connecting....');
// controls are limited, this is just a beginning

// Initiate loop
client.on('StartAddTiles', function(tiles, mapSelected) {
var mapId = mapSelected;
mapLoading[mapId] = { //Create a new Entry in The mapLoading Variable
tilesToLoad : tiles,
tilesLoaded : 0
}
console.log('Start loading '+mapLoading[mapId].tilesToLoad+' tiles.');
// Ask for the first tile
client.emit('AnotherTile', mapLoading[mapId].tilesLoaded);
//

});

// client add new Tile/Tiles
client.on('addTile', function(mapSelected, data, tBx) {
var mapId = mapSelected;
mapLoading[mapId].tilesLoaded = ++1;
console.log('Adding tile '+mapLoading[mapId].tilesLoaded+' of '+mapLoading[mapId].tilesToLoad+' tBx '+tBx);

// insert Tile
db_manager.add_tiles(tileBuffer, function(result) {

if (mapLoading[mapId].tilesLoaded == mapLoading[mapId].tilesToLoad) { // full map loaded
mapLoading[mapId] = ""; //reset the buffer
client.emit('TilesOk', mapLoading[mapId].tilesLoaded);
} else {
console.log('requesting tile num: '+mapLoading[mapId].tilesLoaded);
client.emit('AnotherTile', mapLoading[mapId].tilesLoaded);
}
//

});
});

最佳答案

事件名称区分大小写,您可能也应该在服务器端使用 AddTile 而不是 addTile

关于javascript - socket.io 循环在开始时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com