我有两个http服务器,它们使用日志模块相互通信。在
serverA = SocketServer.TCPServer(("", 8888), myHandler)
serverB = SocketServer.TCPServer(("", 7777), myHandler)
第一个服务器A向服务器B发送GET请求:
^{pr2}$然后,serverB用POST消息回答:
class myHandler(BaseHTTPRequestHandler):
def do_GET(self):
logger = logging.getLogger('mach')
logger.setLevel(logging.DEBUG)
logger.addHandler(HTTPHandler("localhost:8888", "/",method='POST'))
print "1111"
logger.critical('POST from 7777')
print "2222"
return
在调试它时,我看到“1111”被打印出来了,但是“2222”没有被打印出来,在serverA的do\u POST方法中,第一行打印命令没有被打印出来。 然而,当我用wireshark检查它时,我看到一个tcp数据包发送到8888端口,它是my POST msg。。在
那么,会发生什么情况,我看不到它在服务器?在
两台服务器之间出现死锁。场景如下:
服务器A向服务器B发送GET请求,阻止等待响应,即在收到响应(或发生错误)之前,以下内容不会返回:
服务器B在
do_GET()
中从服务器A接收GET请求,但它不发送回复。相反,它将POST请求发送回服务器a,然后服务器B阻塞等待来自服务器a的响应:两台服务器都是单线程的,并且都被阻塞,等待对方的响应,因此会出现死锁。
相关问题 更多 >
编程相关推荐