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

Posted

技术标签:

【中文标题】聊天应用程序:将 Django 与 sockjs-tornado 和 redis 一起使用【英文标题】:Chat application: Using Django with sockjs-tornado and redis 【发布时间】:2013-03-02 20:30:30 【问题描述】:

我正在尝试编写聊天应用程序,这里有一些设计想法: Django 做主网站服务。 Sockjs-tornado 服务于聊天,我想在它们之间设置 redis。 当 sockjs-tornado 在聊天中接收到消息时,它会处理它并发送给其他连接的客户端并将其放入 redis 中,因此 Django 可以保存此消息在持久数据库中。我知道我应该使用 redis 的 pubsub 功能。我知道如何在 tornado(brukva 库)中设置它,但是如何在 django 中订阅 redis 的频道?所以我可以在 django 中接收消息并将其保存到数据库?你有什么想法吗?

【问题讨论】:

【参考方案1】:

我不知道 sockjs 是怎么用的,但是这个例子说明了如何在 django 模型中保存 #在龙卷风中

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/

【讨论】:

你也有python 3的解决方案吗?

以上是关于聊天应用程序:将 Django 与 sockjs-tornado 和 redis 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Sockjs - 在 Python 代码中向 sockjs-tornado 发送消息

将 Spring websockets (sockJS + Stomp) 与基于令牌的身份验证 (JWT) 一起使用的最佳方法

SockJS实践:即时通信关键点

与 Django-chant 聊天

如何自动向下滚动 - 与 django 聊天应用程序

Webpack - 关闭对 /sockjs-node/info 的请求或指定不同的端口