2011-05-25 9 views
10

Bir veritabanında gerçek zamanlı değişiklikler yapıldığında kullanıcıyı bilgilendirmek için bir Tornado web soket sunucusu kullanmaya çalışıyorum. Çoğu tarayıcılar bunları desteklemese de, bunun için HTML5 web soketlerini kullanmayı umuyordum. Tornado paketiyle gelen demoların hiçbiri web soketlerini kullanmıyor ve dokümantasyonda yer almıyor, bu yüzden nasıl başlayacağımı bilmiyorum. Google'da bulabildiğim birkaç örnek ya çalışmıyor ya da belgelenmiyor.Web yuvaları/Tornado - İstemcide veritabanı güncellemesini bildirme

Bir MySQL veritabanı güncellendiğinde veya öğrenmesi için kullanabileceğim benzer bir şey olduğunda verileri bir istemciye aktarmak için Tornado'yu nasıl kullanabileceğimin herhangi bir örneği var mı?

cevap

8

Lee'nin cevabı iyi bir tarayıcıdır, eski tarayıcıları desteklemeniz gerekiyorsa muhtemelen socket.io'yu da isteyebilirsiniz. Sonra

import tornado.websocket 

    class EchoWebSocket(tornado.websocket.WebSocketHandler): 
     def open(self): 
      print "WebSocket opened" 

     def on_message(self, message): 
      self.write_message(u"You said: " + message) 

     def on_close(self): 
      print "WebSocket closed" 

başka işleyici olarak rota onu, ve görünümlerinde WebSocket'e Javascript şunlardır:

Websockets olsa hortuma çok kolaydır

fazla bilgi için
var ws = new WebSocket("ws://localhost:8888/websocket"); 
    ws.onopen = function() { 
    ws.send("Hello, world"); 
    }; 
    ws.onmessage = function (evt) { 
    alert(evt.data); 
    }; 

, kaynak bakın: https://github.com/facebook/tornado/blob/master/tornado/websocket.py

6

Sunucu tarafında socket.io istemcisini ve 'u kullanarak başarılı oldum. Socket.IO websockets üzerinden bir soyutlama sağlar ve websockets tarayıcı tarafından desteklenmiyorsa (uzun yoklama, flaş soketi, vb.) Geri dönüş sağlar.

Bunu kullanabilmek için, veritabanınızı izleyen ve daha sonra web sayfalarınızda socket.io JavaScript'i ekleyen ve tornadio sunucunuzun bulunduğu her yerde bir bağlantı kurmasını sağlayan bir tornadio komut dosyası yazmanız yeterlidir. tornadio komut dosyasında belirtilen URL route adresinde.