[英]Send commands to twisted server
我有一个简单的双绞线TCP服务器,用于从另一个应用程序发送和接收数据。 建立连接后,我就可以向该应用程序通信并向其发送消息。
我希望能够在何时以及将什么内容发送到第三方应用程序时(而不是在连接时)使用外部模块命令。 例如,这是我的服务器代码:
from twisted.internet import reactor, protocol
# Twisted
class Tcp(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
print 'data received: ', data
# do something with data
def connectionMade(self, msg):
# Want to only transport message when I command not immediately when connected
self.transport.write(msg)
class TcpFactory(protocol.Factory):
def buildProtocol(self, addr):
return Tcp()
reactor.listenTCP(8001, TcpFactory())
reactor.run()
我还有另一个模块(由GUI界面操作),该模块定义要发送的消息,并且需要将该消息作为“ msg”传递给connectionMade
做这个的最好方式是什么?
您的第3方呼叫将在connectionMade
内部进行,并且不应直接呼叫。 connectionMade
是一个Twisted回调,它在那里表示客户端在另一侧。 由您决定之后会发生什么。 因此,您可以执行一系列采取self.transport
(包含相关客户数据)的Deferred
s / callbacks之类的操作。 在这些系列的回调中,您将拥有
这是要点:
def connectionMade(self):
d = Deferred()
d.addCallback(self.thirdPartyComm).addErrBack(self.handleError)
d.addCallback(sendMsg)
d.callback(self.transport)
def thirdPartyComm(self, transport):
# logic for talking to 3rd party goes here
# 3rd party should validate the client then provide a msg
# or raise exception if client is invalid
return msg
def handleError(self, error):
# something went wrong, kill client connection
self.transport.loseConnection()
def sendMsg(self, msg):
self.transport.write(msg)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.