@hound406

Push-сервер, C сервер связать?

Добрый день.
Есть потребность в реализации некоего сервиса.
У нас имееются некоторые устройства, которые переодически отправляют свои данные на определенный TCP порт, который слушается вэб сервером написанном на C, он разбирает пакеты от этих устройств (идентификатор устройства, время подключения) и передает их в сервис, который написан на Python. Питоновский сервис разбирает посылки от сишного сервера и делает "publish" в базу redis по номеру идентификатора устройства (это нужно для реализации push уведомлений на базе tornado+redis. Что-то подобное: habrahabr.ru/post/128562/).
Есть клиентская часть, которая при подключении к вэб сокетам "подписывается" в базу redis'а, т.е зашел клиент на сайт, у него в доступе есть устройство с идентификатором - 12345, (как из статье с хабра реализована работа с вэбсокетами). Потом устройство с этим идентификатором подключилось к сишному серверу, он в свою очередь обработал это сообщение и передал питоновскому сервису, что устройство с таким идентификатором в данный момент в сети, этот сервис сделал запись в redis базе, которую перехватил tornado сервис))
фух...выглядит довольно запутанно вроде бы...но при такой схеме все вроде как должно работать.
Но тут работает все в одном направлении, т.е подключилось устройство - передало информацию клиенту, а если клиент хочет что-то отправить этом устройству? Как при такой схеме можно сишный сервис заставить отправить внеплановое сообщение подключенного устройства?
  • Вопрос задан
  • 355 просмотров
Пригласить эксперта
Ответы на вопрос 3
dizballanze
@dizballanze
Software developer at Yandex
Ну в обратном направлении просто, клиент отправляет по веб-сокетам данные, сервер делает publish в Redis, а Tornado (или даже само С-шное приложение) слушает этот канал в Redis и отправляет сообщение устройству.
Ответ написан
Комментировать
@hound406 Автор вопроса
Более предпочительное наверное тут будет, чтобы на сишное приложение слушало redis, а еще одно на торнадо...
Тогда у нас +1 сервис полчается же и соответственно сишное приложение должно держать коннект с еще одним питоновским сервисом. или как-то можно проще все это реализовать?
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
Тривиальная задача реализовать такое на Erlang.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы