萌新正在学习socket编程,在本地(localhost)进行超大文件传输,比如说7G大的文件。我按照网上的例子和相关资料理解,写出来能正常运行,7g文件也能传。但有几个问题想请教一下。
我用的是python的SocketServer写服务端,socket写客户端,传输方式用ftp,用stream流设置buffer_size为4096传输文件。我所理解是connect一瞬间,就是客户端和服务端建立了长连接,而且是IO堵塞的。然而不太明白在打开文件之前和关闭文件之后原demo的作者都用了time.sleep(1)就是等待1秒后再继续执行,这是为了什么?我一开始觉得多余的,但马上发现这样很容易会卡死。
比如以下代码:
# Func to send file def sendfile(filename): print 'You are sending %s' %filename print 'Everything on set, client is about to send file.' time.sleep(1) f = open(filename, 'rb') while True: data = f.read(buffer_size) if not data: break s.sendall(data) f.close() time.sleep(1) s.sendall('EOF') print 'File had been sent successfully!'
2.大文件传输被刻意强调了,但是由于没遇到障碍(翻了翻网上的资料,很多特别强调大文件传输遇到困难了)。所以我就想应该得特殊处理以下,然而我这里却没遇到问题,除了传输文件大所以等待时间长一点会出现假死,但除此之外不知道要如何优化才好?
思路也可以,推介资源也可以,非常感谢!
把 sendfile 放到线程中执行~