|
"Устойчивый" Android клиент. Правильная работа с Socket'ом(потоком).
|
|||
---|---|---|---|
#18+
Нужно иметь "устойчивое соединение" Android-клиента с сервером. 1. Клиент пытается соединиться с сервером через каждые 5(10, N)-секунд. 2. В случае соединения происходит получение данных от сервера. 3. В случае разрыва переход к пункту 1. Тестирование происходит через отключение/включение сервера. После долгого отключения сервера клиент "залипает", "не принимает" сообщения с сервера (возможно заблокирован потом приема). При этом сообщения с сервера уходят. Через NIO то же самое, после долгого отключения не заходит в ключ ON_CONNECT и finishConnect() всегда false. Хотя на стандартном клиенте(J2SE) NIO отрабатывался нормально (тот же самый код). Складывается ощущение, что поток, который обрабатывает input.read(...), где-то блокируется Object.wait(). Т.е. наступает deadlock с потоками, обрабатывающими ГУИ. Что делаю не правильно? В какую сторону смотреть? Что умного посмотреть/почитать? Сложность еще в том, что "отрубается" лог Android'а (Eclipse plugin), в эмуляторе видно динамику, в логе - нет. Код сервера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Код клиента: Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2011, 12:09 |
|
"Устойчивый" Android клиент. Правильная работа с Socket'ом(потоком).
|
|||
---|---|---|---|
#18+
Android -- он такой же как дрова. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2011, 12:37 |
|
"Устойчивый" Android клиент. Правильная работа с Socket'ом(потоком).
|
|||
---|---|---|---|
#18+
А InterruptedException таки игнорируются или просто сократили текст ? Android может останавливать потоки если приложение не активно, после чего ваш код зависнет ( что похоже и происходит ). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2011, 20:28 |
|
"Устойчивый" Android клиент. Правильная работа с Socket'ом(потоком).
|
|||
---|---|---|---|
#18+
пролетевшийА InterruptedException таки игнорируются или просто сократили текст ? Android может останавливать потоки если приложение не активно, после чего ваш код зависнет ( что похоже и происходит ). Кусок кода как есть, не думаю, что этот поток останавливается. Приложение "виснет" в течение 1-2 минут (~200 попыток сделать соединение с сервером), при этом есть динамика в GUI. Блокируется, где-то/что-то уровнем ниже. Исследуя далее выяснилось следующее, если устанавливать низкоуровневый таймаут на чтение socket.setSoTimeout(500); то выскакивает исключение, т.е. коннект к серверу socket.connect(...) проходит и застревает в input.read(...) , при этом сервер успевает передать порцию данных до завершения коннекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2011, 21:05 |
|
|
start [/forum/topic.php?fid=13&fpage=30&tid=1331844]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 329ms |
total: | 451ms |
0 / 0 |