Каков наилучший способ выполнения неблокирующего TCP-соединения в Java? Я хочу иметь возможность использовать сокет с обычными потоками (иногда SSL). Я также должен настроить таргетинг на Android 2.1, поэтому я не могу позволить себе последнее и самое лучшее.Неблокируемое соединение в Java
ответ
Вы можете использовать SocketChannel
и configureBlocking(false)
. Если у вас более одного неблокирующего канала ввода-вывода, и вы намерены использовать их все из одного потока, вы, вероятно, найдете также Selector
.
Обратите внимание, что в большинстве случаев проще и менее подвержено ошибкам использовать блокирующие сокеты и использовать несколько потоков, чтобы ваше приложение продолжало выполнять полезную работу, пока оно заблокировано, ожидая завершения ввода-вывода.
+1: Полностью согласен. Режим блокировки по умолчанию, и вам не нужно вызывать configureBlocking для его использования. NIO был представлен на Java 1.4 в 2002 году и предваряет Android на несколько лет. ;) –
Я думал об использовании NIO, но он не очень хорошо работает с SSL, не так ли? –
На самом деле, похоже, проблемы с передачей SSLSocketChannel в Selector. Если вы используете Selector, см. [Этот вопрос] (http://stackoverflow.com/questions/867751/ssl-and-socketchannel). К сожалению, ссылка в первом ответе кажется нарушенной. –
- 1. Неблокируемое соединение
- 2. Неблокируемое соединение в Linux
- 3. Неблокируемое соединение tcp с epoll
- 4. Неблокируемое соединение сокета всегда преуспевает?
- 5. Неблокируемое монтирование в Linux
- 6. Неблокируемое соединение с адресом loopback (127.0.0.1 или localhost)
- 7. Неблокируемое считывание на трубе
- 8. Неблокируемое ожидание без TPL в 3.5
- 9. Как выдать многопоточное/неблокируемое чтение в FUSE
- 10. Неблокируемое чтение из подпроцесса в Haskell
- 11. Соединение компонент в Java
- 12. Неблокируемое чтение из нескольких подпроцессов (Python)
- 13. Закрытое соединение: рядом в Java
- 14. Соединение PostgreSQL в Java - SQLException
- 15. Как сохранить соединение в java
- 16. SQL полное соединение в Java
- 17. Как реализовать неблокируемое ожидание в автозагрузке tornado reload_hook?
- 18. Неблокируемое событие Timed в Ruby, как JavaScript setTimeout
- 19. многопоточность, начало, соединение -java
- 20. Соединение Java Access DB
- 21. SSL соединение с Java
- 22. Java бинарное соединение
- 23. SSH-соединение с Java
- 24. Соединение Java Oracle падает
- 25. Java-соединение с PHP
- 26. Java-соединение SQL
- 27. Websphere MQ - Java-соединение
- 28. Проверить соединение LDAP (Java)
- 29. Java: SQL-соединение
- 30. HTTPS-соединение java CertificateException
Используйте блокируемое TCP-соединение, но поместите код, который управляет им в отдельном потоке? – aroth
Я делаю это, но соединение может блокироваться довольно долго, в зависимости от сетевых условий. Особенно, когда телефон поддерживает переключение между gsm и umts, например. –