【问题标题】:Python Twisted TCP socket how to set TCP_NODELAY (Disable Nagle's algorithm)?Python Twisted TCP 套接字如何设置 TCP_NODELAY(禁用 Nagle 算法)?
【发布时间】:2016-01-22 03:12:46
【问题描述】:

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

我对twisted做了一些研究,发现这个设置在twisted的abstract.FileDescriptor下(文档链接: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)

【问题讨论】:

    标签: python algorithm sockets tcp


    【解决方案1】:

    Protocol 对象有一个 self.transport,即您正在寻找的 FileDescriptor。这段代码应该做你想做的:

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

    【讨论】:

    • 感谢您抽出宝贵时间回答这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多