Python Twisted TCP socket如何设置TCP_NODELAY(禁用Nagle算法)?

时间:2015-10-22 18:12:18

标签: python algorithm sockets tcp

我在持续开发中有一个实时多人游戏(它目前在应用程序商店中存在:https://itunes.apple.com/us/app/blewp!-eat-or-be-eaten-mmo/id996122625?mt=8),我使用TCP和UDP发送实时消息(TCP用于需要可靠性的消息,就像玩家一样),我的服务器端是用python编写的,使用Twisted作为服务器。我经常需要快速发送小数据包,禁用数据包排队(Nagle的算法)应该有助于让数据包更快到达。

我做了一些关于twisted的研究,发现这个设置是在abstract.FileDescriptor下的twisted(文档链接:http://twistedmatrix.com/documents/8.1.0/api/twisted.internet.tcp.Connection.html

我对Twisted很新,所以有人可以告诉我如何实际调用此设置,对于TCP协议服务器?我无法找到FileDescriptor可访问的位置。 :(

一行示例代码会很好,建议总是受到赞赏;)

这是一个简单的例子,我帮助解释了这个问题:

class TCPProtocol(Protocol):

    def connectionMade(self):
        #add to list of connected clients
        factory.clients.append(self)
        '''HELP HERE PLEASE!!!'''
        '''EG.  self.NO_DELAY=True HOW DO I SET THIS?'''


    def dataReceived(self, data):
        pass

    def sendData(self, data):
        self.transport.write(data)



#setup factory and TCP protocol class
factory = Factory()
factory.protocol = TCPProtocol
factory.clients = []
reactor.listenTCP(1959, factory)

1 个答案:

答案 0 :(得分:3)

Protocol对象的self.transport是您正在寻找的FileDescriptor。这段代码应该做你想要的:

class TCPProtocol(Protocol):

    def connectionMade(self):
        # add to list of connected clients
        factory.clients.append(self)
        self.transport.setTcpNoDelay(True)