2014-12-10 5 views
0

Я ищу способ передачи данных с сервера клиенту. Например, у меня есть два клиента и сервер. Клиент A обновляет, обновляет сервер, теперь я хочу, чтобы сервер подталкивал это обновление другому клиенту B.Сервер для взаимодействия с несколькими клиентами

Вот три варианта, которые я могу придумать.

1) Держите соединение открытым все время от клиента к серверу.
2) Использовать UDP-пакеты (возможно, здесь может возникнуть проблема с nat traversal) 3) Попросите клиента опросить сервер с высокой частотой, чтобы узнать, есть ли какие-либо изменения.

Мне не нравится вариант 1, потому что я чувствую, что есть много и много клиентов, тогда у нас могут закончиться порты tcp? # 2 кажется, что у нас может быть проблема с NAT, то есть клиент должен будет убедиться, что порт открыт, я думаю, что клиент мог бы использовать UPnP для этого, но тогда мне пришлось бы писать дополнительный код, чтобы убедиться, что я получил все пакеты необходимо. # 3 просто кажется, что на самом деле это не действительно реальное время, и открытие и закрытие соединения все время просто кажется грязным.

Есть ли другие рекомендации там? Как Dropbox обрабатывает этот или Exchange-сервер?

+0

Если вам действительно нужно «в режиме реального времени», почему вы сравнивая его с DropBox и Exchange Server, которые, безусловно, не работают в режиме реального времени? Или вы просто злоупотребляете «в реальном времени»? – EJP

+0

Возможно, я ошибаюсь в режиме реального времени. Таким образом, с Dropbox вы добавляете файл на один компьютер, и кажется, что он мгновенно появляется на другой машине. Мне любопытно на стороне клиента B, как правильно это сделать. –

+0

«В режиме реального времени» в вычислениях подразумеваются конкретные ограничения времени *. * – EJP

ответ

1

Это концептуальный ответ,

На стороне клиента вы можете запустить нить/процесс проверки для конкретной последовательности данных периодически. Когда будет отмечено изменение, он будет перенаправлять эти изменения на сервер. [Вы можете использовать HASH для согласованности проверки и использовать отдельные потоки для передачи данных, если сервер имеет слоты для клиентских подключений]

Теперь на сервере, когда он получает обновления NEW, он проверяет других клиентов одного пользователя [например, мобильного телефона или другого ПК]. У каждого клиента будет поток для прослушивания сервера, и когда сервер увидит другие подключения, как я уже упоминал, он попытается найти и нажать на них обновления. Обратите внимание, что вы будете нуждаться в порты, предназначенные для этих услуг для запуска, и я думаю, что это так, как услуги, упомянутые работы

-Happy Coding-

Смежные вопросы