2017-05-30 3 views
1

Ich arbeite an einem Projekt, bei dem ich eine Liste von Tankstellen über die Django Rest-API anzeigen kann, die Stationsdaten, d. H. Die Verfügbarkeit von Brennstoff und Kapazität, zeigt.Django Channels oder Tornado für eine Socket-basierte Verbindung

Ich habe auch einen Mikrocontroller entwickelt, um Kraftstoffstände zu erkennen. Nun ist das Problem, dass diese Daten alle 10 Minuten an mein Web-Backend gesendet werden (könnte in Zukunft auf 1min reduziert werden), indem das Stationsmodell über die Rest-API aktualisiert wird. Ich bin mir nicht sicher, wie ich damit umgehen soll. Wäre etwas wie Django-Kanäle in diesem Fall nützlich?

Der Server verwendet eine Mischung aus C und Java zum Senden von Daten. Ich brauche eine skalierbare Lösung, da viele Stationen geschaffen werden können.

+0

Ja. Kanäle sind die besten Optionen für diesen Zweck. Auch diese Frage ist off-topic, weil Sie keinen Kabeljau bereitgestellt haben .... –

+0

Vielen Dank für Ihre Antwort Raja. Die Frage ist nicht Code-bezogen, sondern methodisch, daher gibt es keinen Code. –

Antwort

1

Ich werde meine eigene Frage beantworten. Websockets ermöglichen bidirektionale Kommunikationsmechanismen, ob zwischen einem Client-Browser und Webserver oder einer Server-zu-Server-Kommunikation.

Es gibt viele Anleitungen zum Herstellen dieser Verbindung zwischen dem Clientbrowser und dem Webserver, aber nur eine sehr begrenzte Dokumentation zur Interaktion zwischen zwei Servern.

Wenn man Django Kanäle eingerichtet hat und hören eingehende Verbindungen heißt auf 127.0.0.1:8001

So Ihre consumers.py würde einen Code wie ws_message wo Sie Ihre Route für alle eingehenden Nachrichten. Es würde einfach aussprechen, was es an das Terminal empfängt.

from channels import Group 
def ws_message(message): 
    print(message.content['text']) 
    Group('chat').send({ 
     'text': 'user %s' % message.content['text'], 
    }) 

Dann, wenn Sie eine Verbindung von Ihrem anderen Server (vielleicht ein Mikrocontroller Übertragen von Daten) der folgende Code schaffen wollen, werden Daten an die angegebene Adresse von 127.0.0.1:8001 senden. Bitte beachten Sie, dass Sie websocket Paket für Python benötigen für sicher sein

pip install websocket

server-socket.py

import websocket 
import _thread as thread 
import time 

def on_message(ws, message): 
    print(message) 

def on_error(ws, error): 
    print(error) 

def on_close(ws): 
    print('Closed Connection') 

def on_open(ws): 
    def run(*args): 
     for i in range(100): 
      time.sleep(1) 
      ws.send("%d" % i) 
     time.sleep(1) 
     ws.close() 
     print ("thread terminating...") 
    thread.start_new_thread(run,()) 


if __name__ == "__main__": 
    websocket.enableTrace(True) 
    ws = websocket.WebSocketApp("ws://127.0.0.1:8001", 
           on_message = on_message, 
           on_error = on_error, 
           on_close = on_close) 
    ws.on_open = on_open 
    ws.run_forever() 

Es ist ziemlich einfach zu tun. Es sendet Zahlen im Bereich von 0-99 an den verbundenen Websocket.

Verwandte Themen