非阻塞循环通过二进制缓冲区并推送到套接字

时间:2013-11-03 14:34:22

标签: javascript sockets asynchronous google-chrome-app

我通过chrome.sockets将文件上传到ftp但是套接字缓冲区大小有限,所以我需要遍历blob并发送更小的数据块。我已经尝试了几种带闭包和回调的方法,但是对我来说唯一的方法是do / while循环,这当然是阻塞的。部分问题是需要在闭包中保留的多个变量。你能建议更好的循环方式吗?

do
{
    chunk = blob.slice(start,end)
    start =end
    end =end + 8192
    chrome.socket.write(this.info.socketId, Socket.string2buffer(chunk), function(writeInfo) {});
}
while (chunk.length>0);

扩展程序的完整代码(单用途ftp管理器)https://github.com/vanous/minime-content-manager/tree/master/chromium-ext-broadcast

1 个答案:

答案 0 :(得分:0)

我相信以下内容应该有效:

var self=this;
var writeChunk=function(start,end){
    var chunk = blob.slice(start,end);
    chrome.socket.write(self.info.socketId, Socket.string2buffer(chunk), function(writeInfo) {
        if(chunk.length>0) writeChunk(end,end+8192);
    });
};
writeChunk(0,8192);