通过FTP上传时,多长时间写入一次套接字?



我正在研究一个集成的FTP上传模块,并使用在线代码,我发现这个方法每隔300毫秒调用一次:

var uploadInterval:int = 300;
var bufferSize:uint = 4096;
private function sendData():void {
    var sourceBytes:ByteArray = new ByteArray();
    sourceFile.readBytes(sourceBytes, 0, bufferSize);
    passiveSocket.writeBytes(sourceBytes, 0, sourceBytes.bytesAvailable);
    passiveSocket.flush();
    if (sourceFile.bytesAvailable < bufferSize) {
        bufferSize = sourceFile.bytesAvailable;
    }
}
interval = setInterval(sendData, uploadInterval);

如果我将时间间隔设置为5毫秒,文件将在10秒内上传。如果我将其设置为300毫秒,它将在37秒左右加载。设置为5ms而不是300 ms可以吗?

更新:
看起来有一个注释掉的命令正在使用阻塞模式。我在网上搜索了更多,看起来它是使用一个间隔,以便能够获得上传进度信息。不管怎样,这是原始的注释掉方法。我还没有测试过:

private function sendBlockData():void {
    var bytes:int;
    var sourceBytes:ByteArray = new ByteArray();
    sourceFile.readBytes(sourceBytes, bytes, Math.min(bufferSize, sourceFile.bytesAvailable - bytes));
    bytes += bufferSize;
    bufferSize = Math.min(bufferSize, sourceFile.bytesAvailable - bytes);
    passiveSocket.writeBytes(sourceBytes, 0, sourceBytes.bytesAvailable);
    passiveSocket.flush();
}

如果套接字阻塞,通常默认情况下,您可以尽可能快地写入,write()调用将阻塞,直到操作系统可以接收更多数据。

所以我不知道为什么你发现的代码在write()调用之间等待一些毫秒,在一般情况下,你循环并发送所有可用的数据而不等待。操作系统会在需要的时候阻止发送者。

相关内容

最新更新