2017-08-27 4 views
0

Ich versuche, eine Echtzeit-Django-Anwendung zu erstellen. Da mein Hosting-Dienst funktioniert, kann ich keinen Websocket-Server parallel zu meinem Django-Server starten.Verbinden mit einem Remote-socket.io-Server von Django-Server

ich es geschafft, User-to-User-Interaktionen zu haben, durch eine Express Server auf einem separaten NodeJS Website mit socket.io und mit Kunden auf dem Django Server erstellen auch an den Remote-socket.io Server verbinden.

Ich möchte jedoch, dass mein Django-Server Ereignisse direkt an Benutzer sendet. Um dies zu tun, möchte ich eine Verbindung zwischen dem Django-Server und dem NodeJS-Server herstellen. So etwas in Python:

socket = io("http://socket.io.server") 
socket.emit('eventForUsers') 

Gibt es überhaupt für mich, dies zu erreichen?

Die einzige Information, die ich gefunden habe, schien, dass ich einen parallelen Server von meiner Django-App aus ausführen musste, was ich nicht tun kann, weil mein Host es mir nicht erlaubt, langfristige Prozesse auszuführen.

Antwort

1

Es hängt wirklich davon ab, was die einfachste Lösung für Sie ist und welche Anforderungen Sie haben. (Wenn Sie eine Echtzeit- bidirektionale Nachrichten wollen, dann schlage ich vor, die socket.io-Client anstelle des POST Beispiel zu verwenden)


POST (GET, PUT, ...)

können Sie (zum Beispiel verwenden) POST Anfragen von Ihrem Django

Django Knoten:python Beispiel (es gibt auch andere Möglichkeiten, um eine POST auf Knoten von Django)

auszuführen

Knoten Beispiel: Hört Post bei /route (Express) und druckt die Parameter des Django Anfrage

var express = require('express'); 
var app = express(); 

app.post('/route', function (req, res) { 
    console.log(req.query); res.end(); 
}); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 

Dann können Sie die Daten in req.params verwenden Aktion wie Rundfunk etwas zu den socket.io Kunden auszuführen (oder ein bestimmte Client)

Dies kann auch um die andere Art und Weise erfolgen, Anfragen Ausführen von Daten von Knoten zu senden, um Django POST (GET,...)


Socket.io-client in Django

Weitere (einfacher) Lösung ist, die socket.io-client in Ihrem Django Webapp enthalten, so dass es zu Ihrem Knoten socket.io Server als Client eine Verbindung herstellt, wenn der Webapp von Browsern geöffnet wird.

(mit Hilfe von Javascript in django)

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io('http://ip:port'); 
    socket.on('connect', function(){alert("Hello World!");}); 
    socket.on('event', function(data){}); 
    socket.on('disconnect', function(){}); 
</script> 

Weitere Quellen: 1. JavaScript (Django Docs) 2.Including the static files in your template

+0

Schön, die erste Lösung scheint ziemlich schlau Ich werde es ausprobieren und Sie wissen lassen. Über die zweite Lösung: es sei denn, ich habe etwas verpasst, dies verbindet nur den Benutzer mit socket.io, aber nicht den Django-Server selbst richtig? Ich sehe nicht, wie ich diese Methode verwenden kann, um eine Kommunikation zu haben Django -> Client –

+0

@RyanPergent Ich weiß nicht genau Ihr Szenario, deshalb schlage ich beide vor, damit Sie denken können, welche Lösung am besten zu Ihnen passt (wenn Sie Webapp-Benutzer wollen) Verbindung herstellen wie Clients ** socket.io **/sonst, wenn Sie die Webanwendung selbst als "Client" verwenden möchten, dann ** Anfrage **). – EMX

+1

Die erste Methode funktioniert großartig, das einzige ist, dass es 'req.query' und nicht' req.params' ist :). Vielen Dank! –