首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:多个SocketServer同时工作

python:多个SocketServer同时工作
EN

Stack Overflow用户
提问于 2012-10-06 15:49:46
回答 3查看 1.1K关注 0票数 0

我想在一个python程序中做3个SocketServer:

代码语言:javascript
复制
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()

我运行它,输出如下:

代码语言:javascript
复制
Finding files... done.
Importing test modules ... done.

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

奇怪的是,它会立即退出程序,所以我的客户端程序无法连接到3套接字服务器。如何防止它退出程序?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-07 00:58:24

守护程序线程在没有其他非守护程序线程运行时终止,因此它们在main结束时退出。添加一些东西来保持main运行,比如:

代码语言:javascript
复制
raw_input('Press enter to stop servers.')
票数 0
EN

Stack Overflow用户

发布于 2012-10-06 15:55:45

如果您真的想从同一个程序中启动这三个服务器,这将是一种解决方案。

票数 0
EN

Stack Overflow用户

发布于 2012-10-06 21:11:14

现在我修改我的代码如下:

代码语言:javascript
复制
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()

它工作得很好。但是现在我不知道如何在需要的时候向客户发送消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12757884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档