Sockets 通过FTP上传时,您可以多久写入一次套接字?
我正在开发一个集成的FTP上传模块,使用在线代码,我发现此方法每隔300毫秒调用一次:Sockets 通过FTP上传时,您可以多久写入一次套接字?,sockets,ftp,Sockets,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); pass
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);
如果套接字阻塞,通常默认情况下,您可以尽可能快地写入,write()调用将阻塞,直到操作系统可以接收更多数据
因此,我不知道为什么您发现的代码在write()调用之间等待了几毫秒,在一般情况下,您可以循环并发送所有可用的数据,而无需等待。操作系统负责在需要时阻止发件人。在阻止模式下,您可以随心所欲地写。管道装满时,它会堵塞。根本不需要休息。好的。我在网上发现有人说这是为了让他们能够获得进展。如果您分块上传,您可以跟踪字节数组的位置。@1.21gigawatts您将获得这些数据,间隔为实际写入发送数据所需的时间。缓冲区越大,事件发生的频率越低。额外的等待简直是浪费时间。从套接字处理事件?嗯,如果我想频繁地获取事件,我可以增加缓冲区大小吗?是4096吗?是的,这简直是浪费时间!我继续访问asdocs,发现发送了一个新的进度事件,可能正是出于此目的。因此,我可以一次性发送所有数据,但仍然可以获取事件。
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();
}