首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扭曲的transport.write

扭曲的transport.write
EN

Stack Overflow用户
提问于 2010-09-01 19:38:29
回答 4查看 6.9K关注 0票数 6

有没有办法强制self.transport.write(response)立即写入它的连接,这样下一次对self.transport.write(response)的调用就不会被缓冲到同一个调用中。

我们有一个具有无法修改的遗留软件的客户端,它读取第一个请求,然后再次开始读取,我遇到的问题是扭曲地将两个写入合并在一起,这破坏了客户端我试图查看延迟的任何想法,但我不认为在这种情况下它会有帮助

示例:

代码语言:javascript
复制
self.transport.write("|123|") # amount of messages to follow 
a loop to generate next message
self.transport.write("|message 1 text here|")

期望值:

代码语言:javascript
复制
|123|
|message 1 text here|

结果:

代码语言:javascript
复制
|123||message 1 text here|
EN

回答 4

Stack Overflow用户

发布于 2013-07-20 07:39:01

我在使用低级Python2.6时遇到了一些相关的问题。与我交谈的主机期望一个ACK字符,然后是一个单独的数据缓冲区,它们都是同时出现的。最重要的是,这是一个TLS连接。但是,如果直接引用套接字,则可以调用sendall(),如下所示:

代码语言:javascript
复制
self.transport.write(Global.ACK)

至:

代码语言:javascript
复制
self.transport.getHandle().sendall(Global.ACK)

..。这应该是可行的。这在X86上的Python2.7和Twisted上似乎不是问题,只是在SHEEVAPlug ARM处理器上的Python2.6。

票数 2
EN

Stack Overflow用户

发布于 2010-09-02 01:12:30

你能说出你使用的是哪种交通工具吗?对于大多数实现,这是典型的方法:

代码语言:javascript
复制
 def write(self, data):
        if data:
            if self.writeInProgress:
                self.outQueue.append(data)
            else:
                ....

根据这些细节,可以将write函数的行为更改为所需的行为。

票数 0
EN

Stack Overflow用户

发布于 2019-03-21 15:19:06

也许您可以将您的协议注册为传输的pull生产者

代码语言:javascript
复制
self.transport.registerProducer(self, False)

然后在您的协议中创建一个write方法,让它的作业缓冲数据,直到传输调用您的协议resumeProducing方法逐个获取数据为止。

代码语言:javascript
复制
def write(self, data):
    self._buffers.append(data)

def resumeProducing(self):
    data = self._buffers.pop()
    self.transport.write(data)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3617584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档