目前,我有一个应用程序有两台服务器:第一个进程命令并单独响应,第二个进程将结果广播给其他感兴趣的订户。他们需要从不同的港口提供服务。我可以开始()他们两个,但我只能得到一个或另一个serve_forever(),因为我读它是一个阻塞函数。我正在寻找关于如何保持两台服务器不会退出的想法。以下简称代码:如何让多个gevent服务器永久服务?
def main():
stacklist = []
subslist = []
stacklist.append(CreateStack('stuff'))
subslist.append(Subscription('stuff'))
bcastserver = BroadcastServer(subslist) # creates a new server
tradeserver = TradeServer(stacklist) # creates a new server
bcastserver.start() # start accepting new connections
tradeserver.start() # start accepting new connections
#bcastserver.serve_forever() #if I do it here, the first one...
#tradeserver.serve_forever() #blocks the second one
class TradeServer(StreamServer):
def __init__(self, stacklist):
self.stacklist = stacklist
StreamServer.__init__(self, ('localhost', 12345), self.handle)
#self.serve_forever() #If I put it here in both, neither works
def handle(self, socket, address):
#handler here
class BroadcastServer(StreamServer):
def __init__(self, subslist):
StreamServer.__init__(self, ('localhost', 8000), self.handle)
self.subslist = subslist
#self.serve_forever() #If I put it here in both, neither works
def handle(self, socket, address):
#handler here
也许我只是需要一种方法来保持两个从离开,但我不知道怎么样。最后,我希望两台服务器都可以永远监听传入的连接并处理它们。
两台服务器需要共享相同的内部状态 – domoarrigato
现在我们需要问自己,如果这是一个很好的设计决策。 – blakev
是的,我同意这不是理想的。该设计需要广播服务器通过一个端口发布基于订阅的活动摘要,并通过另一个端口上的不同API处理交互。我认为一个数据库解决方案不会足够快:每秒消息的平均轮询次数不能超过000次。我想最终将这两个进程守护进程,所以如果他们可以独立启动并停止。这需要它们之间的某种传输链接。目前,它只是起作用,并且从同一进程运行它们可帮助我更快地开发和测试其他功能。 – domoarrigato