Похоже, вы неправильно используете AuthenticationHandler
. Вы не должны немедленно отклонять доступ, если пользователь не может пройти аутентификацию. Если вы сделаете это, он даже не достигнет контекста MVC в конвейере.
Если вы намеренно не хотите отклонить какой-либо доступ для неаутентифицированных пользователей, вы должны только аутентифицировать или передавать его как анонимного пользователя. После этого в какой-то момент включается AuthorizeAttribute
и проверяется, имеет ли пользователь доступ к запрошенному ресурсу или нет. Если он не аутентифицирован, авторизация отклонит запрос.
IIUC, устанавливая опцию TCP_NODELAY должен сбросить все пакеты (т.е. установка реализаций tcp.c NODELAY с вызовом к tcp_push_pending_frames). Таким образом, при установке опции сокета после того, как каждый отправляет вызов, необходимо получить то, что Вы хотите.
Возможно, набор TCP_NODELAY и набор Ваш MTU достаточно низко так, чтобы было бы самое большее 1 сообщение на кадр? О, и добавьте флаг "-фрагмента" на исходящих пакетах
Вы попытались открыть новый сокет для каждого сообщения и закрыть его сразу? Издержки могут быть противными, но это должно разграничить Ваши сообщения.
В худшем варианте развития событий Вы могли пойти один уровень ниже (неструктурированные сокеты), где Вы имеете лучший контроль над отправленными пакетами, но затем необходимо было бы иметь дело со всеми основными элементами TCP.
Возможно, Вы могли попытаться поместить стопку tcp в режим низкой задержки:
echo 1 > /proc/sys/net/ipv4/tcp_low_latency
Это должно способствовать пакетам испускания как можно быстрее по объединяющимся данным. Считайте человека на tcp (7) для получения дополнительной информации.
Вы не можете работать вокруг проблемы, если Вы не уверены, какова проблема.
Если они сделали ошибку новичка предположения, что recv () получает точно одно сообщение затем, я не вижу способ решить его полностью. Отправка только одного сообщения на кадр Ethernet является одной вещью, но если несколько кадров Ethernet прибывают, прежде чем получатель называет recv (), это все еще получит несколько сообщений в одном вызове.
Перегрузка сети делает практически невозможным предотвратить это (при поддержании достойной пропускной способности), даже если они могут сказать Вам, как часто они называют recv ().