【发布时间】:2014-05-26 15:54:21
【问题描述】:
我正在尝试使用 python 的 SocketServer 模块绑定多个服务器:
import SocketServer
from SocketServer import BaseRequestHandler
class HTTPSERVER(BaseRequestHandler):
def handle(self):
rec = self.request.recv(1024)
if rec:
self.request.send('Got something!')
launchme = SocketServer.TCPServer(('', 82),HTTPSERVER)
launchme2 = SocketServer.TCPServer(('', 81),HTTPSERVER)
launchme3 = SocketServer.TCPServer(('', 80),HTTPSERVER)
launchme.serve_forever()
print 'reached first server'
launchme2.serve_forever()
print 'reached second server'
launchme3.serve_forever()
print 'reached third server'
当这个脚本启动时,什么都不会打印,但所有 3 个端口实际上都是打开的:
root@user:/# netstat -pna|more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2751/python
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 2751/python
tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 2751/python
但是这个脚本只服务于“得到了一些东西!”当在端口 82 上发出请求时(第一次绑定)。 SocketServer 模块让所有端口工作的正确方法是什么?
【问题讨论】:
-
Serve_forever 不会返回。在一个线程中运行每一个。
-
当您调用
serve_forever()时,它将无限期地运行并且不会恢复脚本的执行。检查这个其他答案stackoverflow.com/questions/268629/…
标签: python python-2.7 socketserver