我正在尝试写聊天应用,这里有一些设计的想法:
Django做了主网站服务。
Sockjs-tornado提供聊天服务,我想在他们之间设置redis。
当sockjs-tornado在聊天中收到消息时,它会对消息进行处理并发送给其他连接的客户端,并将其放入redis中,因此Django可以将该消息保存在持久数据库中。我知道我应该使用redis的pubsub函数。我知道如何在tornado (brukva库)中设置它,但是我如何在django中订阅redis的频道?所以我可以在django中接收消息并将其保存到数据库中?你有什么想法吗?
发布于 2013-03-04 07:52:28
我不知道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) #在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/
https://stackoverflow.com/questions/15179124
复制相似问题