2017-01-16 4 views
0

У меня нет большого опыта работы с сетевым программированием, но возникла интересная проблема, требующая этого. Сервер будет передавать несколько потоков различных типов данных другим машинам. Каждая машина должна иметь возможность выбирать, какой из потоков (один или несколько) он будет получать. Вся установка ограничивается только локальной сетью. Первоначально, будет только два клиента, но я хотел бы разработать масштабируемый подход, если это возможно.Потоковая передача различных видов данных по локальной сети: tcp или udp?

Существующий код сервера, который передает только один поток, использует TCP-потоковый сокет для этого. Однако, по некоторым данным по этому вопросу, я не уверен, будет ли этот подход масштабироваться для нескольких потоков и нескольких клиентов. Причина в том, что два клиента, которые хотят получать один и тот же поток, но подключаются через разные TCP-сокеты, приводят к снижению пропускной способности? Особенно по сравнению с UDP, что позволяет многоадресной рассылки.

Из-за моей неопытности я полагаюсь на более информированных людей, чтобы посоветовать мне: считая, что я хочу, чтобы поток был надежным, стоит ли начинать с нуля с UDP и внедрять надежность в это, чем продолжать использовать TCP? Или это будет лучше решено путем разработки соответствующей сетевой структуры? Я был бы рад предоставить более подробную информацию, если это необходимо. Благодарю.

ОБНОВЛЕНИЕ: Я ищу PGM и emcaster для надежной многоадресной передачи. Должны иметь реализации C# на стороне сервера и реализации python на стороне клиента.

+0

сперва. Имеет ли значение, если клиент не получает все данные из потока или в неправильном порядке? –

+0

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

+0

Ну, я бы не стал использовать UDP. Зачем пытаться переопределить кое-что, что уже сделано, чтобы удостовериться в этих двух очень важных проблемах. –

ответ

1

Поскольку вы хотите масштабируемую программу, тогда UDP будет лучшим выбором, потому что не требуется дополнительной длины для проверки того, что данные были получены, что ускоряет процесс отправки данных.

+0

Основываясь на комментарии, «Надежность важна, поскольку каждое сообщение в потоке должно быть последовательным. Клиенты будут полагаться на правильный порядок, чтобы сделать полезную обработку на нем, _« UDP будет неприемлемым. –

+0

Однако, поскольку UDP быстрее, чем TCP, это позволяет использовать больше потоков, поэтому может обслуживать больше клиентов, что делает этот подход более масштабируемым. – bendacoder

+1

Я понимаю, но OP хочет надежность и порядок пакетов, а UDP этого не предоставляет. Он может быть добавлен в UDP приложением, но вы не рассматривали проблемы с UDP в отношении запроса. –