|
|
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Как-то странно получается. Клиент замечает, что связь с сервером потеряна, если я выключу сам сервер, а если я например, вырублю сеть на клиенте, то клиенту кажется, что сервер еще в сети. Проверял также на примерах из интернета. Вот один из них без потоков. Код: 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. Код: 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. Тут также, если я выключаю сеть, то клиент понимает, что связь с сервером потеряна. Но если я например, выключу сеть между сервером и клиентом, то ни клиент, ни сервер не понимают, что они потеряли связь. Что можно сделать? Пробовал сделать, отправлять через каждые 5 минут, тестовый пакет, но он почему-то отправлялся раз, а клиент потом не отвечал на другие действия. Я вот еще думал, проверять работоспособность сервера и клиента с помощью пинга на сервере, но будет ли это затратно, если клиентов будет штук 5? И, например, если клиент за это время, как потеряна связь, успеет перезагрузить машину, то это уже не является правильным решением. Может быть кто-нибудь сталкивался и знает способ решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 14:41 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
AlexSSS4Пробовал сделать, отправлять через каждые 5 минут, тестовый пакет, правильно а чтоб работало - баги поправить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 14:45 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Изопропилправильно И при настроенном Keep Alive система это делает самостоятельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 14:47 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovИзопропилправильно И при настроенном Keep Alive система это делает самостоятельно. ненадёжно. неизвестно что на пути NAT и всякие xinetd с Keep Alive сделают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2016, 15:13 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Изопропил, А если с этим тестовым пакетом, придет одновременно другой пакет. То как их отобрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 12:54 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
AlexSSS4Изопропил, А если с этим тестовым пакетом, придет одновременно другой пакет. То как их отобрать? одновременно - ну никак не придут. а служебные пакеты - в протоколе предусмотреть нужно, как ping-pong в websocket, например Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 13:04 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Изопропил, А для проверки лучше сделать отдельный поток? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 15:46 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
AlexSSS4, какова собственно изначальная задача? может и голый TCP применять не нужно, а стоит воспользоваться высокоуровневыми средствами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 16:02 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Изопропил, Задача отслеживать одновременный вход пользователя под одной учетной записи в домен. Если это не отслеживать, то пользователь остается в MultuHashMap, когда связь с севером была потеряна, но после восстановлена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 16:43 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
AlexSSS4, при восстановлении связи - просто чистить коллекцию от мусора- не подойдёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 17:17 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Изопропил, Не могу додуматься, как это воплотить в код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 17:26 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
Лучше всего почитать, как вообще работает TCP протокол. Он работает поверх IP, который представляет из себя негарантированную непоследовательную доставку пакетов. Поверх этого наворачиваются некоторые служебные данные, которые обеспечивают перевысылку потеряных пакетов - и это называется TCP. Теперь вопрос - а как вообще можно понять, что соединение легло? Конечно, если это соединение напрямую точка-точка, то при обрыве провода железо может понять, что был обрыв. Но tcp был разработан для интернета, когда пакет проходит через несколько узлов. Если где-то там на пути затор - пакет не доходит до получателя. И как получателю узнать - то ли пакет к нему не дошел, то ли не слался? А никак, по большому счету. Но обычно делают таймауты. Если данных не было какое-то время, то считается что это обрыв. Сокет при этом надо закрыть, причем желательно жестким методом, с высылкой RST флажка. И протокол делают так, чтобы иногда что-то слалось. Есть и другой способ - заводится понятие сессии, и она может переживать несколько переподключений. Keep alive по умолчанию настроен на 4 часа, и менять эту настройку - это повлиять на всю ОС, а не на конкретный сокет. Довольно бесполезный механизм для пользователя. Больше системный, для подчистки ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 19:03 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
AlexSSS4а если я например, вырублю сеть на клиенте, то клиенту кажется, что сервер еще в сети Если ты где-то вырубил сеть - то ты сам себе злобный буратино. В правильных архитектурах ты должен послать управляющий сигнал типа "node is down" через те-же прикладные протоколы. А на другом конце - принимать соотв решение о ребуте или реконфигурации. Периодический ping - в принципе правильный вариант. Только надо уточнить что не везде в интернетах ICMP ходит. На каких-то узлах (хозяин-барин) могут быть особые правила. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 19:21 |
|
||
|
Отслеживания потери сети socket
|
|||
|---|---|---|---|
|
#18+
maytonВ правильных архитектурах ты должен послать управляющий сигнал типа "node is down" через те-же прикладные протоколы. А на другом конце - принимать соотв решение о ребуте или реконфигурации. Если сеть положили - сигнал на тот конец не дойдет. Тут именно надо посылать пинг, и ждать какое-то время ответа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 01:39 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2124298]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 338ms |

| 0 / 0 |
