Я работаю на сервере в C ++, который будет подключаться к множеству клиентов через UDP. Я решил, что пул потоков будет лучше всего обрабатывать входящие датаграммы из заданного сокета.
Мой вопрос, поэтому, будет ли лучше с точки зрения масштабируемости позволить каждому рабочему потоку сделать вызов sendto? Должны ли они делать это в одном сокете или другой будет предпочтительнее? Весь трафик будет проходить через один порт.
Из того, что я готов, кажется, что вызовы recvfrom и sendto являются атомарными, и у меня уже есть выделенный поток для прослушивания сокета (в настоящее время он не блокируется и использует вызовы для выбора, чтобы выяснить, готов ли сокет для чтения из ).
Если бы я пошел по собственному желанию, я бы, вероятно, использовал бы другой сокет для отправки и использовал несколько потоков для этого (при условии, что все действия были действительны).
Не уверен, насколько это будет полезно, но это общая идея:
Нет никакого преимущества в использовании нескольких сокетов UDP для нескольких потоков, если они не блокируются, а использование одного связанного сокета UDP лучше соответствует вашим заявленным требованиям. Это часть удовольствия от реализации протоколов без учета состояния и датаграмм.
Это адрес / подтвердить ваш вопрос (ы)?
Других решений пока нет …