有一台Twisted服务器,可以响应客户的请求。 “ LineOnlyReceiver”用于协议设计。该过程应如下:
客户端向服务器发送请求(例如“ TEMP?”询问温度),则服务器上的请求数应增加1。服务器发回响应后,该数目应减少1但是,在服务器处理请求(“ TEMP?”)期间,可能会有其他客户端向服务器发送请求,服务器上的请求数应随时间而变化。
那么,如何实时跟踪服务器上的请求数量呢?当前,“ lineReceived”方法用于接收来自客户端的请求并发送回响应(省略其他代码):
Class SimProtocol(LineOnlyReceiver):
def lineReceived(self, request):
self.factory.taskNumber[request.strip()] += 1
print 'Task number: ', self.factory.taskNumber[request.strip()]
time.sleep(10)
resp = self.factory.getResponse(request.strip())
self.transport.write(resp)
self.factory.taskNumber[request.strip()] -= 1
print 'Task number: ', self.factory.taskNumber[request.strip()]
故意在中间添加10秒的延迟,以模拟请求的处理时间。在这10秒钟内,还有其他几个请求发送到服务器,但是服务器直到完成当前请求后才响应其他请求。换句话说,无论有多少客户端正在发送请求,“ print”语句始终显示任务号为1、0、1、0...。
那么应该使用哪种设计方法(可能是一种完全不同的方法,例如获得反应堆队列大小可以做什么?)来完成此功能(实时跟踪服务器上的请求数量) ?