POST для действия контроллера в узле и запускает подключение через веб-сокет к клиенту

Новичок в узле и веб-сокетах, я пытаюсь создать нечто непохожее на типичную игру или чат-приложение.

Мне нужно иметь возможность отправлять некоторые переменные в действие, выполнять поиск и затем подключаться к клиенту с найденными переменными. Я искренне не знаю, возможно ли это.

Основная проблема, с которой я столкнулся, заключается в том, что у меня нет типичного js-клиента, нет браузера, нет. Моими единственными клиентами являются клиенты веб-сокетов python. У меня они подключаются к серверу в порядке ... Ну, они могут пинговать сервер - я пытаюсь с Socket.io, Faye и Worlize. Я бы предпочел использовать socket.io.

Например, если я опубликую это:

 curl -X POST 'http://localhost:8080/timeout?id=1238763876&time=27365716576&bla=stuff' 

В моем app.js у меня есть что-то вроде этого (некоторые биты отсутствуют, мой пример socket.io):

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/public/index.html');
});

app.post('/timeout', function (req, res) {

  //Find socket, not implemented yet

  console.log('I received a private message by ', from, ' saying ', msg);

  io.sockets.on('connection', function (socket) {
    io.sockets.emit('this', { will: 'be received by everyone'});        
  });

});

server.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Маршрут работает, но когда я публикую, я не получаю ничего плохого и никаких ошибок — как я уже сказал, я новичок в Node из Rails. Надеюсь, это что-то прямолинейное.

Возможно ли сделать подобное? Это способ сделать это или я должен попробовать что-то еще.


person simonmorley    schedule 21.06.2013    source источник
comment
Он завис, потому что вы не отправляете никакого ответа в app.post('/timeout'). Извините, я не знаю, что вам нужно сделать, чтобы ваш веб-сокет python общался с веб-сокетом узла, я только пробовал, чтобы веб-сокет сервера общался с веб-сокетом js на стороне клиента.   -  person Plato    schedule 21.06.2013
comment
каково ваше обоснование использования веб-сокетов? было бы разумнее закодировать более обычный REST API и просто заставить приложение python делать запросы к приложению узла?   -  person Plato    schedule 21.06.2013
comment
@plato Да, я знаю, это странно, но мы не работаем с браузерами. У нас есть встроенные устройства под управлением Python. Они уже без проблем подключаются к серверу узла, но нам нужно выдать им полезную нагрузку. Отсюда необходимость отправки исходящих запросов. Имеет ли это смысл?   -  person simonmorley    schedule 21.06.2013
comment
О, и в вашем примере у вас есть app.post('timeout'..., это то, как устройство Python подключается к серверу узла? или вы успешно создали веб-сокет python и заставили его общаться с веб-сокетом вашего узла?   -  person Plato    schedule 21.06.2013
comment
Пример урезан и не является рабочим входящим. Еще одно доказательство того, что мы можем опубликовать действие, немного пошутить и отправить клиентам cmd. Прямо сейчас у нас более 2000 устройств, на которых работает другой клиент Python, который каждые 45 секунд вызывает наше приложение и получает задания. К сожалению, нам нужна реальная информация от них и необходимость мгновенно отправлять команды. Следовательно, попробуйте веб-сокеты. Думаю, я мог бы поставить задание в очередь и «схватить» его при следующем соединении. В идеале мне нужно отдельное приложение для публикации вашего узла, который запускает команду. Спасибо за помощь. С   -  person simonmorley    schedule 21.06.2013
comment
Это похоже на то, что у нас есть куча Android-устройств для управления, но нет причудливых вещей и памяти.   -  person simonmorley    schedule 21.06.2013
comment
Звучит как интересный проект! Если вы можете заставить сокеты работать в python, должно быть просто указать их на uri для приложения node, чтобы сокеты могли общаться. Я не думаю, что вам нужно будет определять экспресс-маршруты, вы, вероятно, можете поместить все в обратные вызовы socket.io - socket.on('connection', handleConnection) или что-то в этом роде.   -  person Plato    schedule 22.06.2013
comment
Работа с серыми клетками точно! Должен быть в пабе этим вечером, но это интереснее. Я могу подключиться, я просто не могу спокойно запускать что-то исходящее. Это немного, что теряет меня.   -  person simonmorley    schedule 22.06.2013


Ответы (1)


Разобрался со следующим:

app.post('/commands/:action/:to', function (req, res) {
 target_socket = connections[req.params.to] 
 if (target_socket) {
   console.log(req.query)
   io.sockets.socket(target_socket.id).emit('name', 'stuff');
   res.send(200);
 }
 else
  res.send(404);
});

Вдохновением для меня послужил этот сайт. .

person simonmorley    schedule 24.06.2013