|
|
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Решил прочитать про nio. Нарыл такой вот примерчик. http://www.java2s.com/Tutorial/Java/0320__Network/Channelselector.htm Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Когда я его запускаю у меня тупо всё зависает. Я так понимаю надо ещё клиента который будет отсылать запросы. Подскажите где взять код клиента) Ещё очень прошу покомментирвать код, который я привёл - нефига не понимаю что происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2014, 23:39 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
наверное ещё стоит сказать, что такого клиента я пробовал запускать: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Но у меня такой вот трейс при запуске: авторException in thread "main" java.nio.channels.UnresolvedAddressException at sun.nio.ch.Net.checkAddress(Net.java:127) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:640) at io.nio.SocketSender.main(SocketSender.java:18) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2014, 23:44 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
а если пишу sChannel.connect(new InetSocketAddress("localhost", 9000)); то java.nio.channels.NotYetConnectedException ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2014, 23:46 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Для начала попробуйте явные IPv4 адреса: Код: sql 1. P.S. "Клиент" - там же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 01:12 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, с портом судя по всему всёё нормально. Вот мой код целиком: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. сервер в консоль пишет такое сообщение: авторAccepted connection from java.nio.channels.SocketChannel[connected local=/127.0.0.1:9000 remote=/127.0.0.1:50940] на клиенте внутрь этого while я так ит не вхожу Код: java 1. Чего-то я не понимаю, что делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 12:42 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90, А если НЕ убрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 13:14 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
no56892, к моему удивлению.... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. но наверное это всё таки как-то нетак должно работать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 13:18 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90 , работа с селекторами, nio требует глубокого понимания самой проблематики сокет серверов. Если ты раньше мало работал с обычными сокетами то работа с селекторами для тебя будет просто "усложнением" или пустым звуком и ты не будешь понимать для чего они созданы или какую задачу решают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 13:33 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90Чего-то я не понимаю, что делать.Насколько я понимаю, соединение акцептовано, но не переведено в режим чтения. P.S. Присоединяюсь к mayton - какая реальная задача потребовала работы с NIO? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 14:18 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
mayton redwhite90 , работа с селекторами, nio требует глубокого понимания самой проблематики сокет серверов. Если ты раньше мало работал с обычными сокетами то работа с селекторами для тебя будет просто "усложнением" или пустым звуком и ты не будешь понимать для чего они созданы или какую задачу решают. Я задался целью изучить nio. Я слышал, что использование селекторов это целая концепция и хотел бы ее понять. Насколько я слышал эта уонцепция используется во многиз популярных фреймворках. Я действительно до этого мало работал с сокетами(если не сказать, что вообще не работал). Я просто не так давно понял, что не понимаю на 100 %, что такое асинхроника, неблокируемость и решил на примере nio потрогать это. А неблокируемость только для сокетов может работать ? может ещё есть какие-то варианты? С чего посоветуете начать? Basil A. Sidorov Насколько я понимаю, соединение акцептовано, но не переведено в режим чтения. P.S. Присоединяюсь к mayton - какая реальная задача потребовала работы с NIO? Поможете поправить код? Реальная задача - расширение знаний, кругозора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 14:57 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90Я задался целью изучить nio. Забей. Я этой целью задался уже несколько лет назад как. И до сих пор плаваю в теме. redwhite90Насколько я слышал эта уонцепция используется во многиз популярных фреймворках. Нет не используется. redwhite90Я действительно до этого мало работал с сокетами(если не сказать, что вообще не работал). Так может стоит начать с написания примитивного многопоточного сервера на блокирующем IO и тестового клиента? А оттуда уже переходить к nio? redwhite90Я просто не так давно понял, что не понимаю на 100 %, что такое асинхроника, неблокируемость и решил на примере nio потрогать это. А неблокируемость только для сокетов может работать ? может ещё есть какие-то варианты? Асинхронность рекомендую изучать на примере Thread, ExecutionService и FutureTask. redwhite90Реальная задача - расширение знаний, кругозора. Это ты ещё до буферов не дошел, похоже. :) Они в жизни намного полезнее чем сокеты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:14 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Blazkowiczredwhite90Насколько я слышал эта уонцепция используется во многиз популярных фреймворках. Нет не используется. apache camel spring reactor там что-то принципиально другое используется? BlazkowiczТак может стоит начать с написания примитивного многопоточного сервера на блокирующем IO и тестового клиента? А оттуда уже переходить к nio? Да хотел потрогать именно неблокируемость. Как я понял асинхронность это nio2 а неблокируемость это nio. Хотел просто hello world запустить чтобы понять, что понимается под неблокируемостью. BlazkowiczЭто ты ещё до буферов не дошел, похоже. :) Они в жизни намного полезнее чем сокеты. Такие буферы? http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1108005&msg=16374133 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:53 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90apache camel spring reactor там что-то принципиально другое используется? apache camel - интеграционный фреймверк, который включает в себя возможность messaging-а через MINA, которая в свою очередь является TCP сервером на NIO. Сам фреймверк к NIO отношения не имеет. spring reactor - аналогично. Асинхронный фреймверк. Может использовать коннекторы, которые реализованы через NIO. Если причислять подобным образом, тогда уже можно все JEE контейнеры добавить. Ведь они тоже используют NIO для рализации HTTP over TCP транспорта. Правда к JEE это ровного никакого отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:02 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90Я задался целью изучить nio. Я слышал, что использование селекторов это целая концепция и хотел бы ее понять. Насколько я слышал эта уонцепция используется во многиз популярных фреймворках. Я действительно до этого мало работал с сокетами(если не сказать, что вообще не работал). Я просто не так давно понял, что не понимаю на 100 %, что такое асинхроника, неблокируемость и решил на примере nio потрогать это. А неблокируемость только для сокетов может работать ? может ещё есть какие-то варианты? С чего посоветуете начать? 1) Ты можешь прожить длинную и счастливую жизнь но так и не столкнуться с необходимостью явного использования каналов, селекторов, и прочего. Это абстракции очень даже low-level и их используют для серверов с нагрузкой где много потоков ждут сетевых событий сокета. Если у тебя такой нагрузки нет то и не нужны тебе эти технологии. Они сложнее в отладке и поиске ошибок чем обычные выделенные сокеты. Тоесть nio для обычного казуального разработчика это как "армия которая никакого вреда кроме пользы не приносит" 2) Неявно ты их уже используешь т.к. в JDK при включении поддержки nio были уже переписаны большинство io пакетов. Посмотри исходники FileOutputStream, RandomAccessFile, Socket они все включают в себя функции java.nio.*. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:34 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90, авторЕщё очень прошу покомментирвать код, который я привёл - нефига не понимаю что происходит. Ну... Он ждет соединения, принимает и подписывает новый канал на запись. При этом закрывает серверный сокет. Затем дожидается момента, когда можно записать в сокет, записывает в него и закрывает еще и тот сокет. У вас там дальше исключение на клиенте происходит? Тоже вполне ожидаемо. Клиент ведь читать не пытается, он пытается писать. А его игнорируют. И сокет ему закрывают. От такой несправедливости клиент заканчивает свою жизнь IOException'ом. Советую поробовать объяснить, что просиходит, самому. Иначе придется рассказывать про весь NIO (selectors) с самого начала. Если нет аллергии на scala, можно взять работающий пример и попробовать его поменять. Я тоже недавно начал экспериментировать. https://github.com/maxkar/nio-mts - репо. Собирать sbt assemblyPrepare. Запускать java -jar .target/apps/demo-echo/assembly/demo-echo.jar для сервера и то же с любым аргументом для клиента. Можно туда отладки понапихать и всего, что угодно. В отличие от учебных примеров, этот более устойчив к IOException (весь сервер не умирает). Плюс умеет убивать слоупоков и просто зазевавшихся. Там пока только echo, планируются рефакторинги и что-то вроде простого чата. Но оно уже не чисто тесты NIO, оно движется в направлении простенькой библиотечки. Можно лишние транспорты для начала попробовать открутить. Заодно разберетесь, что происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 22:52 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90, начните с nio2. Интереснее и концептуальнее, хотя тоже не идеал. Потом селекторы легче пойдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 15:04 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
rfq, ок, начну пока с nio2. Но кто-нибудь на пальцах может объяснить что такое неблокирующий мод в nio? Просто как концепция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 12:18 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90Но кто-нибудь на пальцах может объяснить что такое неблокирующий мод в nio? Просто как концепция. Когда читаешь данные, то в блокирующем IO, если данные ещё недоступны, то поток блокируется. Например, если HDD их ещё недочитал. Или сетевой интерфейс их ещё не прислал. Заблокированый поток останавливает свою работу, поэтому разработчику нужно больше потоков, чтобы компенсировать простои CPU во время IO блокировок. В неблокирующем IO, при чтении, просто возращается ноль новых данных, сообщая разработчику, что их нет. Поток не блокируется и его можно занять чем-то полезным, пока не появятся данные. Неблокирующее IO позволяет использовать меньше потоков, чтобы более эффективно использовать CPU и сэкономить на переключении конктекста. Это особенно критично для большого серверов с большим количеством клиентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 12:24 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо. Но ведь в классическом блокирующем io мы можем просто перед каждым чтением проверять сколько данных доступно для чтения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:38 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90спасибо. Но ведь в классическом блокирующем io мы можем просто перед каждым чтением проверять сколько данных доступно для чтения? Можем. Ты спросил что такое "неблокирующий мод". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:41 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я тогда просто не понимаю профита от неблокирующего режима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 13:53 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90я тогда просто не понимаю профита от неблокирующего режима. Ну, если так влоб сравнивать только чтение с использованием available(), то разницы действительно не много. Но суть ведь не в этом. NIO, ведь, совершенно отдельный API, на котором можно много чего такого, что через IO не реализовать в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 14:11 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, аааа во оно как. Я думал, что эти фичи как раз неблокирумый режим позволяет сделать(то есть он стал предпосылкой к созданию), а получается, что это не особо то и связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 16:45 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
redwhite90Blazkowicz, аааа во оно как. Я думал, что эти фичи как раз неблокирумый режим позволяет сделать(то есть он стал предпосылкой к созданию), а получается, что это не особо то и связано. Можно ещё вспомнить о том что запись тоже бывает блокирующей. В OutputStream нет аналога available() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 16:55 |
|
||
|
Помогите разобраться с селекторами в nio.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, хм, интересная тема, только проблема если в одной из следующих строчек ты расчитываешь, что файлик уж записался. а у Вас есть понимание того как они этого добились не использую трэды внутри? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2014, 17:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38709249&tid=2126784]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
166ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 490ms |

| 0 / 0 |
