Загрузка больших файлов с помощью WebSocket

Я пытаюсь загрузить большие файлы (размером не менее 500 МБ, предпочтительно до нескольких ГБ ), используя API WebSocket. Проблема в том, что я не могу понять, как написать «отправить этот фрагмент файла, освободить используемые ресурсы, а затем повторить». Я надеялся, что смогу избежать использования для этого чего-то вроде Flash/Silverlight.

В настоящее время,Я работаю с чем-то вроде:

function FileSlicer(file) {
    // randomly picked 1MB slices,
    // I don't think this size is important for this experiment
    this.sliceSize = 1024*1024;  
    this.slices = Math.ceil(file.size / this.sliceSize);

    this.currentSlice = 0;

    this.getNextSlice = function() {
        var start = this.currentSlice * this.sliceSize;
        var end = Math.min((this.currentSlice+1) * this.sliceSize, file.size);
        ++this.currentSlice;

        return file.slice(start, end);
    }
}

Затем я загружал с помощью:

function Uploader(url, file) {
    var fs = new FileSlicer(file);
    var socket = new WebSocket(url);

    socket.onopen = function() {
        for(var i = 0; i < fs.slices; ++i) {
            socket.send(fs.getNextSlice()); // see below
        }
    }
}

В основном это возвращается немедленно, bufferedAmount не изменяется (0 ), и он продолжает итерацию и добавляет все слайсы в очередь перед попыткой отправить его; нет socket.afterSend, чтобы я мог правильно поставить его в очередь, и именно здесь я застрял.

25
задан Vlad Ciobanu 18 June 2012 в 09:27
поделиться