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(),延迟了一个多小时的主要内容,如果未能解决你的问题,请参考以下文章

处理 Twisted Web 服务器中的所有资源

ZMQ 和 Twisted

php中$_POST接收不到参数问题

设计网页录入信息与自己定义server数据接收

结合使用WebSphere MQ和Twisted

java后怎样接收通过FormData发来的数据?