2014-12-22 2 views
5

Я много читал на Stackoverflow, но после недели мышления и исследований, я бегу застрял ...WebSocket связи между серверами

Так что я действительно должен спросить :)

Надежда Я объяснить проблема правильно, если нет, скажите!

Проблема в simpel. Мне нужны 2 сервера ... Сервер A - это не делает ничего больше, чем заполняет базу данных каждые 15 минут, а сервер B делает данные с данными с сервера A.

Его легко разрешить сервер B сделать запрос http для данных, но я действительно хочу, чтобы сервер B получал «обновление сокета» с сервера A, всякий раз, когда он обновлял данные базы данных.

Проблема: сервер B не всегда находится на одном URL-адресе .... Таким образом, сервер базы данных не может просто выполнить запрос на получение/отправку, потому что он не всегда будет знать свой URL-адрес.

Вот почему я надеюсь, что сервер B может начать подключение socket.io к серверу базы данных. Сохранение строки на сервере A, чтобы сервер A мог отвечать своими новыми данными базы данных по уже установленному сокету подключение ...

Итак, в принципе ... Возможно ли иметь общее соединение socket.io между двумя серверами .. точно так же, как сервер между клиентом делает ???

Действительно спасибо !!!

ОБНОВЛЕНИЕ: немного очистить его.

У меня есть база данных запаса. Он получает все данные каждые 15 минут из торгового API. Этот сервер никогда не должен останавливаться! Это могло бы, но его раздражающие, причины данных будут непоследовательными ...

У меня есть еще один скрипт, который будет постоянно развиваться. Это делает расчеты по данным с сервера базы данных. Таким образом, он будет иметь (dev) ошибки и т. Д. Время от времени. Этот скрипт не должен останавливать сценарий «код базы данных» ... Поэтому я хочу, чтобы они отделяли их друг от друга. Вот почему мне нужно иметь 2 сервера, соединяющий друг с другом ..

Моей база данных работают с фиксированной URL .. Но мой сценарий развития зависит от того, где я разрабатываю на данный момент ..

Может быть, есть способ лучше решить то, что я пытаюсь достичь ..?

+0

просто используйте зависимость socket.io-client на клиентском сервере – zaynetro

+0

Хмм выглядит как путь! Я попытаюсь это сделать, и я буду предлагать решение, если оно работает :) – DutchKevv

+0

@zaynetro, знаете ли вы, что обе стороны должны использовать socket.io-client?Причина. Я продолжаю сбой 404 ошибки при попытке подключиться к этому серверу. – DutchKevv

ответ

1

должно быть возможно, серверы часто являются клиентами других серверов. Вы также можете заставить сервер прослушивать несколько портов - сервер A может прослушивать соединения с сервера B (B с изменяющимся URL), может установить соединение с опросом для изменений с A. Или, как вы сказали, иметь A толкайте их.

Вы можете использовать модуль узла http для выполнения запросов; вот резюме:

http = require('http'); 
var call = http.request(
    { hostname: "google.com", 
     port: 80, 
     path: "/", 
     method: "GET", 
     auth: "user" + ":" + "password" 
    }, 
    function(res) { 
     var data = ""; 
     res.on('data', function(chunk) { 
      data += chunk; 
     }); 
     res.on('end', function(err) { 
      console.log("Response was", data); 
     }); 
    } 
); 
req.write(""); 
req.end(); 
+0

Спасибо за быстрый комментарий! :) Но да, я также думаю, что это возможно. Но проблема, с которой я сталкиваюсь в моей голове ... Является ли браузер «запускает» клиентское соединение ... Как я могу позволить серверу «запускать» сокет-соединение с другим сервер .. – DutchKevv

+0

модуль 'http' может делать запросы; есть также пакеты npm, такие как 'restify', которые могут быть полезны, если требуется более сложная функциональность. Я отредактирую свой ответ с примера – Andras

+0

да, но это моя точка зрения на вопрос .. Его не сложно сделать http-запрос. Но сервер базы данных не может сделать http-адрес, потому что он не всегда будет правильным URL-адресом серверы, которые «прослушивают». Вот почему socket.io выглядит как идеальное решение. http-запрос закроется через некоторое время и к тому, какой URL-адрес должен будет опубликовать базу данных после этого. – DutchKevv