Я настраиваю некоторые сокеты, натолкнулся на какое-то любопытное поведение, и мне было интересно, если это ожидалось.
У меня есть два потока на каждой стороне сокета.Авторы (по одному на каждой стороне) просто извлекают сообщения из очереди, сериализуют их, а затем записывают байты.Читатели (по одному на каждой стороне) читают заголовок и текст моего пользовательского протокола, десериализуют сообщение и запускают событие.
Достаточно просто, верно?
Интересное поведение, которое меня интересует, возникает, когда клиент подключается к серверу, а затем сразу пишет сообщение.Клиент может быть настолько быстрым, что к тому времени, когда клиент отправит сообщение, сервер не ускорил поток чтения.Если это произойдет, то сервер никогда не получит сообщение.Сообщения, отправленные после того, как поток чтения фактически вызывает Read (), успешно получены и обработаны.
Ожидается ли такое поведение?Ожидается ли, что Read () игнорирует байты, записанные в сокет до того, как что-либо будет считано на другой стороне?