聊天应用程序:使用Django与sockjs-tornado和redis

con*_*000 1 django tornado websocket redis sockjs

我正在尝试编写聊天应用程序,这里有一些设计思路:
Django做主网站服务.
Sockjs-tornado提供聊天,他们之间我想设置redis.

当sockjs-tornado在聊天中收到消息时,它会处理它并发送给其他连接的客户端并将其置于redis中,因此Django可以将此消息保存在持久数据库中.我知道我应该使用redis的pubsub功能.我知道如何在龙卷风(brukva库)中设置它,但我如何订阅django中的redis'频道?所以我可以在django中收到消息并将其保存到数据库中?你有什么想法?

mad*_*rdi 7

我不知道sockjs是如何使用的,但这个例子说明了如何在django模型
#in tornado中保存

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)  
Run Code Online (Sandbox Code Playgroud)

#in django_url

url(r'/to/django_project/url/chat_save_base/','app.my_view')
Run Code Online (Sandbox Code Playgroud)

#我的看法

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()
Run Code Online (Sandbox Code Playgroud)

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