Socket имеет эти новые асинхронные методы начиная с .NET 3.5 для использования с SocketAsyncEventArgs (например, Socket.SendAsync () ), преимущества в том, что они используют порты завершения ввода-вывода и избегают необходимость продолжать выделять.
Мы создали класс с именем UdpStream с простым интерфейсом - всего лишь StartSend и событие Completed . Он выделяет два SocketAsyncEventArgs, один для отправки и один для получения. StartSend просто отправляет сообщение с помощью SendAsync и вызывается примерно 10 раз в секунду. Мы используем событие Completed в принимающем SocketAsyncEventArgs, а после обработки каждого события мы все получаемAsAsc, так что он формирует цикл приема. Опять же, мы получаем примерно 10 раз в секунду.
Наша система должна поддерживать до 500 этих UdpStream объектов. Другими словами, наш сервер будет одновременно взаимодействовать с 500 различными конечными точками IP.
Я заметил в примерах MSDN SocketAsyncEventArgs, что они выделяют N x SocketAsyncEventArgs, по одному для каждой ожидающей операции приема, которую вы хотите обработать за один раз. Мне не совсем ясно, как это связано с нашим сценарием - мне кажется, что, возможно, мы не получаем преимущества от SocketAsyncEventArgs, потому что мы просто выделяем по одному на конечную точку. Если мы получим 500 SocketAsyncEventArgs, я предполагаю, что мы не получим никакой выгоды. Возможно, мы все еще получаем выгоду от портов завершения ввода-вывода?
Правильно ли использует этот дизайн SocketAsyncEventArgs, когда
масштабирование до 500?
Для случая, когда у нас используется один UdpStream, есть
Есть ли какие-либо преимущества использования SocketAsyncEventArgs по сравнению с использованием более старого API Begin / End?