2013-03-02 145 views
0

我想寫聊天應用程序,這裏有一些設計思路:
Django做主網站服務。
Sockjs龍捲風服務聊天,他們之間我想設置redis。

當sockjs-tornado在聊天中接收到消息時,它會對其進行處理併發送給其他連接的客戶端,並將其放入redis中,以便Django可以將此消息保存在持久數據庫中。我知道我應該使用redis的pubsub功能。我知道如何在龍捲風(布魯克圖書館)中設置它,但是如何在django中訂閱redis的頻道?所以我可以在django中接收消息並將其保存到數據庫中?你有什麼想法?聊天應用程序:使用Django與sockjs龍捲風和redis

回答

6

我不會知道sockjs如何使用,但這個例子說明如何在Django模型保存
#IN龍捲風

import brukva 
import tornado.web 
import tornado.websocket 

c = brukva.Client() 
c.connect() 

class MessagesHandler(tornado.websoket.WebsocketHandler): 

    def open(self): 
     #.... 

    def handle_request(self, response): 
     pass 

    def on_message(self, message): 
     #.... 
     c.publish(self.channel, json.dumps({ 
      "sender": self.sender_name, 
      "text": message, 
     })) 

     http_client = tornado.httpclient.AsyncHTTPClient() 
     request = tornado.httpclient.HTTPRequest(
       '/to/django_project/url/chat_save_base/', 

       method="POST", 
       body=urllib.urlencode({ 
       "message": message.encode("utf-8"), 
       "sender": self.sender.name, 
      }) 
     http_client.fetch(request, self.handle_request) 

#IN django_url

url(r'/to/django_project/url/chat_save_base/','app.my_view') 

#my_view

from django.views.decorators.csrf import csrf_exempt 
from messages.models import Message 

@csrf_exempt 
def my_view(request): 
    message_text = request.POST.get("message") 
    sender = User.objects.get(id=request.POST.get("sender_id")) 

    message = Message() 
    message.text = message_text 
    message.sender_id = sender_id  
    message.save() 

其他信息來源: http://habrahabr.ru/post/160123/

+0

你也有python 3解決方案麼? – Alp 2013-12-23 10:25:29

+0

我沒有抱歉,( – madjardi 2013-12-24 13:02:29