我在持续开发中有一个实时多人游戏(它目前在应用程序商店中存在: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)
答案 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)