Каналы Django или Tornado для подключения на основе сокетов

Я работаю над проектом, в котором у меня есть список автозаправочных станций, которые можно просмотреть через API Django Rest, показывающий данные станции, то есть доступность топлива и емкости.

Я также разработал микроконтроллер для определения уровня топлива. Теперь проблема в том, что эти данные будут отправляться на мой веб-сервер каждые 10 минут (в будущем это может быть сокращено до 1 минуты), обновляя модель станции через остальные API. Я не знаю, как с этим справиться. Будет ли в этом случае полезно что-то вроде каналов Django?

Сервер использует смесь C и Java для отправки данных. Мне нужно, чтобы это было масштабируемое решение, так как существует потенциал для создания многих станций.


person IVI    schedule 30.05.2017    source источник
comment
Да. Каналы - лучшие варианты для этой цели. Также этот вопрос не по теме, потому что вы не предоставили никакой трески....   -  person Raja Simon    schedule 30.05.2017
comment
Спасибо за ответ Раджа. Вопрос связан не с кодом, а с методологией, поэтому кода нет.   -  person IVI    schedule 30.05.2017


Ответы (1)


Я отвечу на свой вопрос. Веб-сокеты обеспечивают двунаправленные механизмы связи между браузером клиента и веб-сервером или связью между серверами.

Существует множество руководств по установке этого соединения между браузером клиента и веб-сервером, но очень мало документации о том, как взаимодействовать между двумя серверами.

Если кто-то настроил каналы Django и прослушивает входящие соединения, то есть на 127.0.0.1:8001

Таким образом, ваш Consumer.py будет иметь такой код, как ws_message, где будет указан ваш маршрут для любых входящих сообщений. Он просто отобразил бы то, что он получает, на терминал.

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

Затем, если вы хотите установить соединение с другого вашего сервера (возможно, с микроконтроллера, передающего данные), следующий код отправит данные на указанный адрес 127.0.0.1:8001. Обратите внимание, что вам понадобится пакет websocket для python, чтобы обязательно сделать

pip install websocket

сервер-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()

Это довольно просто. Он отправляет числа в диапазоне 0-99 на подключенный веб-сокет.

person IVI    schedule 31.05.2017