ЛИНУКС: Возможна ли передача по локальной сети? Если да, то желательно ли это? Какие еще есть варианты? - PullRequest
2 голосов
/ 05 декабря 2010

В настоящее время я работаю над созданием масштабируемого дизайна сервера в C ++ для сервера Ubuntu. Достижим ли трубопровод по локальной сети? Каков наилучший вариант для быстрой связи по локальной сети?

Справочная информация для заинтересованных: Я делаю многопользовательскую игру с другом. Это будет основано на TCP. Дело в том, что для linux сделать сервер мультисервисным сервером означает создание нового процесса для каждого клиента или выбор () через fdset подключенных клиентов. Я хочу объединить эти подходы и создать процесс «менеджер», который выберет около 100 клиентов и сообщит о любых изменениях вверх по цепочке процессу «Taskmaster», который затем распространит изменения среди других процессов менеджера. Это будет нормально работать с трубопроводами, если менеджеры и мастера задач находятся в одном блоке, но если я захочу масштабировать его позже, мне понадобится быстрый метод связи между локальными сетями.

Ответы [ 4 ]

2 голосов
/ 06 декабря 2010

Оформить заявку на приложение netcat. На одной машине вы можете запустить netcat как сервер, передавая выходные данные в ваш процесс:

nc -l -p 1234 | myApp

Это будет прослушивать TCP-порт 1234 и распечатывать все, что получает через стандартный вывод.

А на второй машине:

myApp | nc 192.168.1.2 1234

Где 192.168.1.2 - это IP-адрес первой машины. Вам нужно поискать справочную страницу nc для конкретной информации - все вышеперечисленное по памяти.

1 голос
/ 06 декабря 2010

Так же, как вы задаете этот вопрос, вы, похоже, понимаете, что для связи между связанными процессами необходим канал.

Способ думать об этом - вам нужно общение между двумяпроцессы, будь то пара компонентов в вашей системе, пара клиент-сервер или что-то еще.Затем вы выбираете механизм, который работает для данной географии.Трубы работают, если процессы локальные.Вы также можете использовать общие очереди памяти для канала без копирования.Вы также можете использовать IP (через сокеты) через интерфейс обратной связи.Чтобы пройти по сети (WAN или LAN), вам в значительной степени необходимо использовать IP.

Наконец, в дополнение к TCP, рассмотрите возможность использования UDP, поскольку вы получаете встроенные границы сообщений иболее простое управление конечной точкой.

1 голос
/ 06 декабря 2010

Потоковый сокет (SOCK_STREAM, в сочетании с AF_UNIX, если строго локально, или AF_INET, если он более tcp / ip) является сетевым эквивалентом двунаправленного канала со всеми упорядоченными данными.

0 голосов
/ 06 декабря 2010

LAN обычно являются сетями на основе Ethernet.Это означает, что любой протокол, работающий в вашей сети, должен быть основан на Ethernet.TCP / IP может работать и работает в сетях Ethernet, но каналы и локальные сокеты предназначены только для межпроцессного взаимодействия на одном хосте, поэтому совершенно не подходят для приложений с несколькими хостами.

Если различные компонентыработать на другом хосте, вам нужно будет связать их через некоторый протокол на основе TCP / IP.Существуют некоторые устаревшие протоколы, такие как IPX и UUCP, которые работают через Ethernet, но они были полностью заменены TCP / IP.

...