我想在一个python程序中做3个SocketServer:
import threading
import SimpleHTTPServer
import SocketServer
class PolicyHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(128).strip()
print self.data
if self.data == '<policy-file-request/>\0':
self.request.sendall('message 1')
class LiveRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.request.sendall('message 2')
def main():
httpd = SocketServer.TCPServer(('',80),\
SimpleHTTPServer.SimpleHTTPRequestHandler)
httpdThr = threading.Thread(target=httpd.serve_forever)
httpdThr.daemon = True
httpdThr.start()
liveServer = SocketServer.TCPServer(('',8090), LiveRequestHandler)
livThr = threading.Thread(target=liveServer.serve_forever)
livThr.daemon = True
livThr.start()
policyServer = SocketServer.TCPServer(('',834), PolicyHandler)
policyThr = threading.Thread(target=policyServer.serve_forever)
policyThr.daemon = True
policyThr.start()
if __name__ == '__main__':
main()我运行它,输出如下:
Finding files... done.
Importing test modules ... done.
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK奇怪的是,它会立即退出程序,所以我的客户端程序无法连接到3套接字服务器。如何防止它退出程序?
发布于 2012-10-07 00:58:24
守护程序线程在没有其他非守护程序线程运行时终止,因此它们在main结束时退出。添加一些东西来保持main运行,比如:
raw_input('Press enter to stop servers.')发布于 2012-10-06 15:55:45
如果您真的想从同一个程序中启动这三个服务器,这将是一种解决方案。
发布于 2012-10-06 21:11:14
现在我修改我的代码如下:
httpd = SocketServer.TCPServer(('',80), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpdThr = threading.Thread(target=httpd.serve_forever)
httpdThr.daemon = True
httpdThr.start()
liveServer = SocketServer.TCPServer(('',8090), LiveRequestHandler)
livThr = threading.Thread(target=liveServer.serve_forever)
livThr.daemon = True
livThr.start()
policyServer = SocketServer.TCPServer(('',834), PolicyHandler)
policyThr = threading.Thread(target=policyServer.serve_forever)
policyThr.daemon = True
policyThr.start()它工作得很好。但是现在我不知道如何在需要的时候向客户发送消息。
https://stackoverflow.com/questions/12757884
复制相似问题