Websockets,运行非常长的任务并在任务运行时更改配置

时间:2013-11-24 23:57:37

标签: python events tornado

我在python中使用龙卷风有一个简单的websocket服务器。它工作得很好,但我需要一个功能,我不知道如何实现。所以有一个websocket服务器可以监听我的端口。现在,当此服务器收到消息时,我需要符合此消息切换操作并运行很长时间任务或取消已运行任务(此服务器运行的任务)。它应该是这样的:

class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
    print 'new connection'
    self.write_message("Hello World")

def on_message(self, message):
    #unpack message
    command = message[:2]
    taskid = message[2:4]
    print 'some message'
    if command == '00':
       # starting task with id = 1 which will take over 1 hour or more
       task.start() #it will take more than 1 hour!
    elif command == '01':
       # cancel task with id = 1
       task.stop()
    elif command == 'SomeOtherOptionsINeedToHandle':
       # Do the others
       task.internal_loop.change_configuration

def on_close(self):
  print 'connection closed'

我有点困惑,我希望你能给我一些提示。谢谢。

1 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标,我个人会研究芹菜和兔子mq。在这种情况下,排队服务器很不错,因为您删除了消息并返回套接字,因此您不会阻止套接字连接。您将传入一个回调函数,该函数将在完成后返回,您可以使用它将结果传递给正确的函数。

龙卷风的方式是使用gen.coroutine,它真的很棒,我碰巧喜欢在队列中删除消息的能力,任何类型的客户端都不仅仅是龙卷风服务器。这是指向文档的链接:tornado gen docs