Có cách nào để sử dụng Socket.IO http://socket.io/ với Django?Tôi có thể sử dụng Socket.IO với Django không?
Trả lời
Tôi đang yêu cầu thực hiện django phía máy chủ tồn tại cho node.js trong django.
No. node.js là ngôn ngữ riêng của mình đang chạy trong trình thông dịch riêng của nó. Tuy nhiên nếu bạn đang yêu cầu nếu có một ứng dụng Django cho phép giao tiếp với một khách hàng Socket.IO, sau đó có và không có. Không, bởi vì không có giải pháp được tạo trước nào hiện có, và có bởi vì tất cả các phần bạn cần để thực hiện nó đã tồn tại.
Để thực hiện các giao thức với django, hãy kiểm tra Django-Websocket cho máy chủ backend WebSocket, thư viện Ajax từ Dajax Project và Socket.IO-rack đó là một viên ngọc ruby mà thực hiện giao thức và ruby là đủ gần trong cấu trúc để django mà bạn có thể nhận được rất nhiều cảm hứng từ nó.
Có Tôi hỏi nếu có một ứng dụng django cho phép giao tiếp với một khách hàng Socket.IO. – User
Không. Không có Socket.IO-django. nhưng như tôi đã nói, Django-websocket + Dajax thực hiện tất cả các phần phía máy chủ bạn cần để thực hiện các giao thức chính mình. – Thomas
Không * sử dụng ** django-websocket **. Tôi là tác giả của nó và giải thích khá một vài lần bây giờ mà nó chỉ đơn giản là không thể sử dụng websockets theo một cách phù hợp tiêu chuẩn với django. Xem [câu trả lời này] (http://stackoverflow.com/questions/4363899/making-moves-w-websockets-and-python-django-twisted/4369471#4369471) và đọc [tuyên bố từ chối trách nhiệm về pypi] (http://pypi.python.org/pypi?%3Aaction=search&term=django-websocket). kthxbye –
Chắc chắn bạn có thể!
Bản thân Django không đồng bộ vì vậy bạn phải sử dụng máy chủ Socket.IO song song với máy chủ django bình thường của bạn, node.js không phải lúc nào cũng là lựa chọn tốt nhưng vẫn tồn tại những người khác viết bằng python thuần túy.
đây là blog/hướng dẫn sử dụng gevent làm máy chủ socket.io.
http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/
Đối với một giải pháp tương tự mà có một chút lịch sử, bạn có thể nhìn vào quay quanh, (www.orbited.org)
Thậm chí có cả [ứng dụng Django: django-socketio] (http://pypi.python.org/pypi/django-socketio/). –
@DenisBilenko, Lưu ý rằng dự án đó về cơ bản không được duy trì và chỉ hoạt động với phiên bản 6 tuổi của socket.io không hoạt động với nhiều trình duyệt hiện đại. Tôi học được điều này một cách khó khăn... – Cerin
Đối với một ví dụ của việc sử dụng socket.io với django, bạn có thể muốn để xem django-serverpush. Nó tích hợp django với socket.io như việc vận chuyển và lốc xoáy/tornandio2 như máy chủ async thay vì Node.js
https://github.com/hamax/django-serverpush
khác đã sử dụng django với Node.js + socket.io với RabbitMQ như hàng đợi thông điệp cầu nối giữa hai người. Có một cuộc nói chuyện, "Real-Time Django" tại djangocon 2011 đã mô tả cách tiếp cận này cho các ứng dụng thời gian thực lớn (giải thưởng).
Bắt đầu từ đây:
và ở đây:
Có một số ví dụ Django như thế nào để bắt đầu.
Nó dựa trên Gevent, triển khai mô hình đồng thời hợp tác. Nó xuất phát từ một thế giới yêu cầu/đáp ứng, vì nó bổ sung một số callbacks và micro-threads mà không áp đặt nó một cách ồ ạt trên công việc của bạn.
Hãy thử nó ra :)
Guys không có hỗ trợ vững chắc cho socket.io với django ... có như thế nào bao giờ chương trình đồ chơi dễ dàng hỗ trợ g-event socket.io hỗ trợ đã được giảm cho năm ngoái là tốt, django-socket.io cũng bị bỏ rơi. Nếu bạn muốn xây dựng một chương trình đồ chơi đơn giản sử dụng django-socket.io và hoặc g-event socket.io chắc chắn, nhưng bất cứ điều gì mà quy mô là không "https://github.com/ryesoft/gevent-socketio" đây là thử nghiệm.
Các vấn đề với nhiều hơn 1 người lao động với gunicorn .... https://github.com/abourget/gevent-socketio/issues/112
Công việc xung quanh là cam kết này. https://github.com/getpenelope/gevent-socketio/commit/6c80c17705c9a1b3adcb0f99abde1c4d369c337b
Tôi nghĩ rằng nó sẽ ném nó ra có chỉ trong trường hợp ai đó đang cố gắng sử dụng điều này trong một môi trường sản xuất như bản thân tôi.
Tôi nghĩ cách tốt nhất để giao tiếp không đồng bộ với Django là có máy chủ nút nghe ở cổng khác và sử dụng ứng dụng api của Socket.io. Bằng cách này, bạn không phụ thuộc vào sự hỗ trợ của các mô-đun cho django và rất đơn giản: Node lắng nghe yêu cầu từ khách hàng, chuyển đổi yêu cầu này trong một yêu cầu gửi và gửi đến Django cho cổng nghe Django. Là cách tốt nhất tôi nghĩ.
server.js
var http = require('http');
var server = http.createServer().listen(3000);
var io = require('socket.io').listen(server);
var querystring = require('querystring');
io.on('connection',function(socket) {
console.log('Connected to the client');
socket.on('new comment',function(data) {
console.log('Web--->Node');
var values = querystring.stringify(data);
console.log(values);
var options = {
hostname:'localhost',
port:'8000',
path:'/create-comment',
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
'Content-Length':values.length
}
};
var request = http.request(options, function(response) {
response.setEncoding('utf8');
response.on('data',function(data){
//Here return django
console.log('Django-->Node');
io.emit('return comment',data);
});
});
request.write(values);
request.end();
});
});
views.py
def trysock(request):
print 'In tryshok'
comments = Comment.objects.all()
dic = {
'name': 'User',
'form': CommentForm(),
'comments': comments
}
return render(request,'index.html',dic)
@csrf_exempt
def create_comment(request):
print 'Django<---Node'
Comment.objects.create(
user = request.POST['user'],
comment = request.POST['comment']
)
response = JsonResponse({'user' : request.POST['user'], 'comment' : request.POST['comment']})
print response.content
return HttpResponse(response.content)
index.html
<div class='col-md-12'>
<div class='col-md-6'>
<form method='POST'>
{% csrf_token %}
{{form.comment}}
<button id='boton'>Comentar</button>
</form>
</div>
<div id='comentarios' class='col-md-6'>
{% for comment in comments %}
<p>{{ comment.user }} - {{ comment.comment}}</p>
{% endfor %}
</div>
</div>
<!-- Fin Formulario comentarios -->
</div>
<script>
var socket = io.connect('http://localhost:3000');
console.log(socket);
$('#boton').on('click', Comentar);
function Comentar(e) {
console.log('Comentar(e)')
e.preventDefault();
var datos = {
user:"user",
comment : 'comment'
};
socket.emit('nuevo comentario', datos);
console.log('Enviando....: ' + datos.user + '-' + datos.comment);
}
socket.on('devolviendo comentario', function(data) {
console.log('Recibiendo...');
var dato = JSON.parse(data);
$('#comentarios').prepend('<p>' + dato.user + '-' + dato.comment + '</p>')
});
</script>
- 1. Sử dụng socket.io với Cluster?
- 2. Tại sao tôi nên sử dụng Socket.io?
- 3. Tôi có thể có phiên cố định với HAProxy và socket.io có xác thực không?
- 4. Tôi có thể truy cập cookie từ Socket.io không?
- 5. Tôi có thể sử dụng Node.js NPM và socket.io trên công cụ google app
- 6. Tôi có thể sử dụng nHibernate với monotouch không?
- 7. Tôi có thể sử dụng OpenId với ASP MembershipProvider không?
- 8. Tôi có thể sử dụng lại LayoutPrams với ViewGroup.addView không?
- 9. Tôi có thể sử dụng JQuery Mobile với EmberJS không?
- 10. Tôi có thể sử dụng tagit với twitter bootstrap không?
- 11. Tôi có thể sử dụng Grunt với TFS không?
- 12. Tôi có thể sử dụng python với hình vẽ không?
- 13. Tôi có thể sử dụng BeginInvoke với MulticastDelegate không?
- 14. Chúng tôi có thể sử dụng Foundation với HTML5Boilerplate không?
- 15. Tôi có thể sử dụng Artifactory với Python PIP không?
- 16. Máy chủ socket.io tốt nhất để sử dụng với Django - gevent hoặc tornadio2 là gì?
- 17. Làm thế nào tôi có thể sử dụng ORM Django trong ứng dụng Tornado của tôi?
- 18. Có thể sử dụng Django và Node.Js không?
- 19. Làm thế nào tôi có thể sử dụng Django Social Auth để kết nối với Twitter?
- 20. Sử dụng socket.io làm api
- 21. Tôi có cần sử dụng virtualenv với Vagrant không?
- 22. Socket.IO không thể gọi 'bật'
- 23. Tôi có thể sử dụng các yêu cầu HTTP Post cho SOAP không? - SOAP và Django
- 24. Mẫu Django - tôi có thể đặt biến để sử dụng trong mẫu chính không?
- 25. Phiên Socket.io không có express.js?
- 26. unity3D: kết nối với node.js bằng cách sử dụng socket.io
- 27. Cách sử dụng Websockets với Pyramid và socket.io?
- 28. Bạn có thể sử dụng Python v. 2.7 với Django không?
- 29. nodejs socket.io không thể kết nối với máy chủ?
- 30. Tôi có thể sử dụng bao nhiêu Java với GWT?
Bạn không là rất cụ thể. Câu trả lời cơ bản là "không", vì socket.io là một chương trình Node.js có hỗ trợ đa trình duyệt. Mặt khác, hoàn toàn có thể gửi các sự kiện từ Django đến máy chủ Socket.io qua kênh cục bộ và hoàn toàn có thể sửa đổi các hàng trong bảng từ Socket.io qua DBSlayer để thông báo cho Django về các thay đổi và thậm chí có thể cho cả hai để lại dấu vết trong máy khách để giao tiếp trạng thái giữa cả ba. Nhưng bạn đang cố gắng làm gì? –
Tôi đang yêu cầu thực hiện một phía máy chủ django tồn tại cho node.js trong django. – User
** [Redis] (https://redis.io/) ** có thể giúp, nó giải quyết được vấn đề của tôi –