2013-07-04 8 views
10

मैं एक परीक्षण को एक साथ जोड़ने की कोशिश कर रहा हूं जो websockets क्लाइंट को टॉरनाडो सर्वर से कनेक्ट करने की अनुमति देता है और मैं चाहता हूं कि टोरनाडो सर्वर हर एक्स सेकंड में सभी क्लाइंट को एक संदेश भेज दे।पायथन टोरनाडो websockets कैसे हर एक्स सेकंड संदेश भेजने के लिए?

कारण मैं ऐसा कर रहा हूं क्योंकि wbesockets कनेक्शन चुपचाप कहीं गिराए जा रहे हैं और मैं websockets सर्वर द्वारा भेजे गए आवधिक "पिंग्स" के बारे में सोच रहा हूं कनेक्शन बनाए रखेगा।

मुझे डर है कि यह एक सुंदर नोबिश प्रश्न है और नीचे दिया गया कोड बल्कि एक गड़बड़ है। मेरे पास टर्ननाडो के चारों ओर लपेटा हुआ मेरा सिर नहीं है और इसे काम करने के लिए पर्याप्त गुंजाइश है।

import tornado.httpserver 
import tornado.websocket 
import tornado.ioloop 
import tornado.web 
import tornado.gen 
import time 
from tornado import gen 

class WSHandler(tornado.websocket.WebSocketHandler): 
    def open(self): 
     print 'http://mailapp.crowdwave.com/girlthumb.jpg' 
     self.write_message("http://www.example.com/girlthumb.jpg") 

    def on_message(self, message): 
     print 'Incoming message:', message 
     self.write_message("http://www.example.com/girlthumb.jpg") 


    def on_close(self): 
     print 'Connection was closed...' 

@gen.engine 
def f(): 
    yield gen.Task(tornado.ioloop.IOLoop.instance().add_timeout, time.time() + 8) 
    self.write_message("http://www.example.com/x.png") 
    print 'x' 

@gen.engine 
def g(): 
    yield gen.Task(tornado.ioloop.IOLoop.instance().add_timeout, time.time() + 4) 
    self.write_message("http://www.example.com/y.jpg") 
    print 'y' 

application = tornado.web.Application([ 
    (r'/ws', WSHandler), 
    ]) 

if __name__ == "__main__": 
    tornado.ioloop.IOLoop.instance().add_callback(f) 
    tornado.ioloop.IOLoop.instance().add_callback(g) 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

उत्तर

9

आप इसके अंदर शेड्यूलर क्यों लिखने की कोशिश नहीं करते? :)

def schedule_func(): 
    #DO SOMETHING# 

#milliseconds 
interval_ms = 15 
main_loop = tornado.ioloop.IOLoop.instance() 
sched = tornado.ioloop.PeriodicCallback(schedule_func,interval_ms, io_loop = main_loop) 
#start your period timer 
sched.start() 
#start your loop 
main_loop.start() 
3

मिले कि लगभग ठीक है कि मैं क्या चाहता हूँ इस के लिए स्वीकार किए जाते हैं जवाब:

How to run functions outside websocket loop in python (tornado)

एक मामूली संशोधन के साथ

, ऊपर के लिंक पर स्वीकार किए जाते हैं जवाब लगातार पिंग संदेशों भेजता है।

बदलें:

def test(self): 
    self.write_message("scheduled!") 

रहे हैं:

def test(self): 
    self.write_message("scheduled!") 
    tornado.ioloop.IOLoop.instance().add_timeout(datetime.timedelta(seconds=5), self.test) 
यहाँ आधुनिक है
संबंधित मुद्दे