Скажем, у меня есть ОДИН SocketChannel на сервере, ожидающем, когда OP_READ станет готовым, и ONE SocketChannel на клиенте, который использует ОДИН вызов записи в буфере для отправки данных на сервер. Гарантируется ли тогда, что OP_READ будет готов только после того, как все данные, которые отправил клиент, прибыли?OP_READ готов только тогда, когда SocketChannel.write() завершает?
ответ
Следует ли гарантировать, что OP_READ будет готов только после того, как все данные, отправленные клиентом, прибыли?
Короткий ответ: нет.
Длинный ответ:
Приемный канал будет готов, как только по крайней мере один байт доступен для чтения. Байты, как правило, становятся доступными более чем по одному, но, как правило, нет никакой гарантии, что общий буфер, заполненный байтами, будет разделен, и, конечно же, никто, что все байты не поступят до готовности канала приема. Данные могут быть разделены в нескольких точках как на стороне записи, так и на стороне чтения. Это имеет мало общего с количеством отправителей, количеством получателей или конфликтом ресурсов.
Данные зависят от некоторой степени от базового сетевого протокола - например, почти все ставки отключены для протокола типа потока, такого как TCP, но протокол типа дейтаграммы, такой как UDP, должен дать вам вид вы, похоже, хотите. В частности, UDP не гарантирует гарантированную доставку, поэтому в этом случае у вас есть разные проблемы. Абстракция канала лучше подходит для протокола потока.
- 1. JQuery прибудет maps.google.com только тогда, когда документ готов
- 2. программа сигнала для выхода только тогда, когда он будет готов
- 3. Окно формы нагрузки тогда завершает
- 4. socketchannel.write() становится очень медленным, когда размер сообщения большой.
- 5. IOS ручки Push-уведомления о запуске приложения только тогда, когда UI готов
- 6. только визуализации страницы, когда метод асинхронной завершает
- 7. уведомление, когда MPMoviePlayerController.preparePrerollAds() готов
- 8. Javascript :: жить заменить() с регулярным выражением, только тогда, когда слово «завершает»
- 9. Как всплывать модально только тогда, когда функция Ajax завершает выполнение в bootstrap jquery?
- 10. startUpdatingLocation работает только тогда, когда Wi-Fi включен, но не тогда, когда только 3G в ON
- 11. Когда ListView готов?
- 12. Компиляция кода только тогда, когда это необходимо
- 13. Match последняя occurency только тогда, когда несколько
- 14. Непрозрачность выцветанию работает только тогда, когда defered
- 15. .EXPORT_ALL_VARIABLES работает только тогда, когда сделал «фальшивый»
- 16. MouseLeave только тогда, когда MouseEnter заканчивается
- 17. скрыть только тогда, когда я нахожусь снаружи
- 18. меню Load только тогда, когда это необходимо
- 19. TeamCity: Строить только тогда, когда изменения доступны
- 20. Запуск функции только тогда, когда другой закончен
- 21. content_script только тогда, когда соответствует расширению URI
- 22. RxJava испускается только тогда, когда эмиттер останавливается
- 23. collapsingToolbarLayout установить титул только тогда, когда рухнул
- 24. ImportError только тогда, когда я использую докер
- 25. Sequelize «где» только тогда, когда req.query определяется
- 26. показывать подсказки только тогда, когда многоточие активно
- 27. Фонд оповещения показать только тогда, когда успех
- 28. Замените значение только тогда, когда оно больше
- 29. UnicodeEncodeError только тогда, когда работает как хрон
- 30. Сделать доступным только тогда, когда функция готова