我有一个困扰我很久的问题,目前我正在研究一个操作外部请求的守护进程。它就像一个服务器客户端。在这个项目中,我使用的是Twisted Python Framework,并且我成功构建了一个非多线程服务器,它可以工作!但现在,我需要立即为几个客户服务。我不知道如何在Twisted Framework中执行此操作。我尝试了所有我所知道的......
请帮助我:|
class Server(protocol.Protocol, protocol.Factory):
def buildProtocol(self, addr):
if addr.host in ipList:
log.msg("Connected from IP: " + addr.host)
return self
return None
def dataReceived(self, data):
reactor.callFromThread(self.actionCreator(data))
def actionCreator(self, data):
jsonData = json.loads(data)
if not jsonData["action"]:
log.msg("Incorrect data from IP: " + self.transport.getPeer().host + " data: " + data)
self.transport.write(json.dumps({'response' : '300'}))
elif jsonData["action"] == 'echo':
log.msg("Doing ask from IP: " + self.transport.getPeer().host)
self.transport.write(json.dumps({'response' : '400', 'data' : {'status' : 'online'}}))
elif jsonData["action"] == 'wget':
log.msg("Downloading file... for user - " + jsonData["user"])
os.system("wget -q http://****************")
self.transport.write(json.dumps({'response' : '400', 'data' : {'status' : 'downloaded'}}))
else:
log.msg("Incorrect data from IP: " + self.transport.getPeer().host + " data: " + data)
self.transport.write(json.dumps({'response' : '300'}))
if __name__ == '__main__':
try:
log.msg("Running server...")
context = ssl.DefaultOpenSSLContextFactory(certificate + "/server.key", certificate + "/server.crt")
log.msg("Initiating a secure SSL connection...")
reactor.listenSSL(config.getint(general, 'port'), Server(), context)
log.msg("Waiting for connections...")
reactor.run()
except KeyboardInterrupt:
sys.exit()
答案 0 :(得分:1)
您的服务器默认处理并发客户端 - 没有线程 - 作为编程模型的属性,后跟Twisted。
我没有在您的示例代码中看到任何使此无效的内容 - 如果您删除(破坏)尝试使用线程,则此服务器在为多个客户端提供服务时应该没有任何问题。