Twisted Server通过POST接收数据流,逐字节读取request.content.read(),延迟了一个多小时
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Twisted Server通过POST接收数据流,逐字节读取request.content.read(),延迟了一个多小时相关的知识,希望对你有一定的参考价值。
我打算通过http POST调用接收二进制数据流。
我相信客户端正在工作,也就是说,它将字节块写入服务器,我可以看到通过tcpdump
发送的数据量,但是Twisted的request.content
类似文件的对象仅开始产生一次输出客户端断开连接。
这是服务器处理程序的外观:
def render(self, request):
if request.path == '/incoming-stream':
d = deferLater(reactor, 0, lambda: request)
d.addCallback(self.async_read)
return NOT_DONE_YET
def async_read(self, request):
sys.stdout.write('\nasync_read ' + str(request) + '\n')
sys.stdout.flush()
while True:
byte = request.content.read(1) # <--- read one byte
if len(byte) > 0:
sys.stdout.write(repr(byte))
sys.stdout.flush()
else:
break
sys.stdout.write('\nfinished ' + str(request) + '\n')
sys.stdout.flush()
request.write(b"finished")
request.finish()
如果我无法通过POST执行此操作,则切换到WebSocket不会有问题,但是我首先想尝试通过POST完成此操作。发布的数据运行时间长(每小时有一个新的POST请求,它处于活动状态并接收一个小时的数据),带宽相对较高的传感器数据约为1kbps。
我知道有更好的数据传输方法(WebSocket,MQTT,AMQP),但是通过nginx SSL端点接收数据时,POST和WebSocket给我带来的麻烦最少。当前未使用NGINX(以丢弃可能引起的任何缓冲)。
答案
Twisted Web在其IResource
抽象中不支持流式上传。
请参见https://twistedmatrix.com/trac/ticket/288
以上是关于Twisted Server通过POST接收数据流,逐字节读取request.content.read(),延迟了一个多小时的主要内容,如果未能解决你的问题,请参考以下文章