python - 在 Twisted 中将消息从一台服务器发送到另一台服务器

标签 python twisted

我是一个完全的 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/

相关文章:

python 扭曲 : Performing multiple writes at once

python - Python 中 Comet 的最新推荐?

python - 为什么在此 Python 代码中允许使用大括号?

python 从 os.system stdout 中提取字段

Python:发出哔哔声

python - 如何创建一个带有两个线程的 python 应用程序,每个线程都有一个高速公路应用程序

python扭曲环境: _Cryptography_cffi_444d7397xa22f8491. pyd DLL加载失败?

python 新的 AST 优化器

python - Hyde(Python)是一个独立的解决方案吗?

python - Twisted同时执行10个线程并等待结果