我是一个完全的 Twisted 和 Python 菜鸟,所以如果我的术语有误或我所做的任何事情都是愚蠢的,我深表歉意。尽管如此……
我已经通过以下方式实现了我的服务器:
def makeServer(application, port):
factory = protocol.ServerFactory()
factory.protocol = MyChat
factory.clients = []
tempServer = internet.TCPServer(port, factory)
tempServer.setServiceParent(application)
return tempServer
application = service.Application("chatserver")
server1 = makeServer(application, port=1025)
server2 = makeServer(application, port=1026)
server3 = makeServer(application, port=1027)
请注意,MyChat 是一个具有“receiveMessage”操作的事件处理类:
def lineReceived(self, line):
print "received", repr(line)
for c in self.factory.clients:
c.transport.write(message + '\n')
我希望服务器 1 能够将消息传递给服务器 2。相反,我希望 server1 被视为 server2 的客户端。 如果服务器 1 收到消息“hi”,那么我希望它向服务器 2 发送完全相同的消息。 服务器 1 唯一需要做的就是发送它从其服务器接收到的消息客户端到服务器 2。
我怎样才能做到这一点?
注意:如果有帮助,您可以完全改变我实现服务器的方式。
最佳答案
应用程序的不同部分可以使用方法调用相互交互。
向 server2 发送消息实际上只是调用与 server2 相关的对象之一的方法。
例如,在 MyChat
中,您可能有:
def lineReceived(self, line):
print "received", repr(line)
for c in self.factory.clients:
c.transport.write(message + '\n')
for server in self.factory.otherServers:
server.otherServerMessage(self, line)
这假设了一些事情:
- 您将新的
otherServers
属性添加到您的工厂。它的内容是与您设置的其他监听服务器相关的对象。这些可能是工厂对象或协议(protocol)对象。这取决于您打算如何处理消息,哪种方式最方便。 - 您为这些相关对象提供了一个新方法
otherServerMessage
来处理以这种方式传递的消息。如果您要将消息直接传送到MyChat.lineReceived
(如果您愿意,您可以轻松做到)那么我希望您最终会无限递归;使用不同的方法可以区分从客户端接收的消息和从另一台服务器接收的消息。
关于python - 在 Twisted 中将消息从一台服务器发送到另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8209871/