#https://docs.djangoproject.com/en/dev/topics/install/ sudo apt-get install python-pip sudo pip install django #http://redis.io/download sudo apt-get install redis-server #https://github.com/andymccurdy/redis-py sudo pip install redis #https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager sudo apt-get install python-software-properties sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs #https://github.com/LearnBoost/socket.io npm install socket.io #https://github.com/shtylman/node-cookie npm install cookie
django-admin.py startproject realtime_tutorial && cd realtime_tutorial python manage.py startapp core mkdir nodejs
from django.db import models from django.contrib.auth.models import User class Comments(models.Model): user = models.ForeignKey(User) text = models.CharField(max_length=255)
python manage.py syncdb python manage.py createsuperuser Node Server With Socket.IO
var http = require('http');
var server = http.createServer().listen(4000);
var io = require('socket.io').listen(server);
var cookie_reader = require('cookie');
var querystring = require('querystring');
var redis = require('socket.io/node_modules/redis');
var sub = redis.createClient();
//订阅chat channel
sub.subscribe('chat');
//配置socket.io来存储Django设置的cookie
io.configure(function(){
io.set('authorization', function(data, accept){
if(data.headers.cookie){
data.cookie = cookie_reader.parse(data.headers.cookie);
return accept(null, true);
}
return accept('error', false);
});
io.set('log level', 1);
});
io.sockets.on('connection', function (socket) {
//把信息从Redis发送到客户端
sub.on('message', function(channel, message){
socket.send(message);
});
//客户端通过socket.io发送消息
socket.on('send_message', function (message) {
values = querystring.stringify({
comment: message,
sessionid: socket.handshake.cookie['sessionid'],
});
var options = {
host: 'localhost',
port: 3000,
path: '/node_api',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': values.length
}
};
//使用Django server发消息
var req = http.get(options, function(res){
res.setEncoding('utf8');
//输出错误信息
res.on('data', function(message){
if(message != 'Everything worked :)'){
console.log('Message: ' + message);
}
});
});
req.write(values);
req.end();
});
});
<!DOCTYPE html>
<html>
<head>
<title>Realtime Django</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script src="http://localhost:4000/socket.io/socket.io.js"></script>
<script>
$(document).ready(function(){
var socket = io.connect('localhost', {port: 4000});
socket.on('connect', function(){
console.log("connect");
});
var entry_el = $('#comment');
socket.on('message', function(message) {
//Escape HTML characters
var data = message.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");
//Append message to the bottom of the list
$('#comments').append('<li>' + data + '</li>');
window.scrollBy(0, 10000000000);
entry_el.focus();
});
entry_el.keypress(function(event){
//When enter is pressed send input value to node server
if(event.keyCode != 13) return;
var msg = entry_el.attr('value');
if(msg){
socket.emit('send_message', msg, function(data){
console.log(data);
});
//Clear input value
entry_el.attr('value', '');
}
});
});
</script>
</head>
<body>
<ul id="comments">
{% for comment in comments %}
<li>{{comment.user}}: {{comment.text}}</li>
{% endfor %}
</ul>
<input type="text" id="comment" name="comment" />
</body>
</html>
from core.models import Comments, User
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseServerError
from django.views.decorators.csrf import csrf_exempt
from django.contrib.sessions.models import Session
from django.contrib.auth.decorators import login_required
import redis
@login_required
def home(request):
comments = Comments.objects.select_related().all()[0:100]
return render(request, 'index.html', locals())
@csrf_exempt
def node_api(request):
try:
#通过sessionid获得 user
session = Session.objects.get(session_key=request.POST.get('sessionid'))
user_id = session.get_decoded().get('_auth_user_id')
user = User.objects.get(id=user_id)
#创建Comment
Comments.objects.create(user=user, text=request.POST.get('comment'))
#创建后就把它发送到聊天室
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.publish('chat', user.username + ': ' + request.POST.get('comment'))
return HttpResponse("Everything worked :)")
except Exception, e:
return HttpResponseServerError(str(e))
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'core.views.home', name='home'),
url(r'^node_api$', 'core.views.node_api', name='node_api'),
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'admin/login.html'}, name='login'),
url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}, name='logout'),
)
python manage.py runserver localhost:3000 #In a new terminal tab cd into the nodejs directory we created earlier node chat.js
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有