|
Авто реконнект к серверу из JavaScript, полная перезагрузка страницы
|
|||
---|---|---|---|
#18+
Уважаемые участники! Только не смейтесь, опыта JS никакого, да и в WEB тоже. Однако, потребовалось организовать автоматическое восстановление соединенения с сервером. Нужна полная перезагрузка страницы, не из кеша, если я правильно выражаюсь, а так, что бы сервер открыл новую сессию. Причем, желательно, что бы это работало и в разных браузерах. Кстати, в IE, похоже, уже не работает. Но тут нарисовалась еще более серьезная проблема. Конечно, надо думать, какой-то код на JS может работать в браузере "вечно" и без соединения с сервером, пока сам браузер работоспособен. Но, видимо, это не касается случая, когда мы обращаемся к серверу в попытках восстановления соединения. Через несколько минут (причем, похоже, это время короче, если эта вкладка сейчас открыта на экране), Edge выводит сообщение "Не удается открыть эту страницу" и.т.д, и от моего скрипта, конечно, в браузере ничего не остается. Старница-то другая. Можно ли, для начала, это как-то побороть? Желательно чистый JS, только браузер, - на сервер надежды никакой, это практически железка с минимальным функционалом. Пока, погуглив и кое-что переделав, пришел к такой конструкции, которая работает ограниченное время, дальше совершенствовать ее пока не возможно, из-за указанной проблемы: Код: javascript 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2021, 19:04 |
|
Авто реконнект к серверу из JavaScript, полная перезагрузка страницы
|
|||
---|---|---|---|
#18+
Да, наверное, нужно пояснить это предложение: "Нужна полная перезагрузка страницы, не из кеша, если я правильно выражаюсь, а так, что бы сервер открыл новую сессию. " Дело в том, что сервер "трекает" каждого пользователя по уникальному URL, причем тайм-аут у него достаточно короткий, если клиент отвалился. Но если потом просто подсоединится по адресу 192.168.1.49:10005, то далее опять все хорошо работает (хоть сутки, пока есть связь), просто за 192.168.1.49:10005 добавляется случайный идентификатор. Не знаю, как это у сервера внутри устроено, полагаю, что после соединений он сразу дает редирект на новый URL и держит пул соединений. Но, в общем, главное тут, я думаю, заново загрузить с сервера страницу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2021, 19:50 |
|
Авто реконнект к серверу из JavaScript, полная перезагрузка страницы
|
|||
---|---|---|---|
#18+
Andi_WEB, - Причем, желательно, что бы это работало и в разных браузерах. Кстати, в IE, похоже, уже не работает. ИЕ ничего не знает про Promise Если нужно просто "пнуть" сервер по адресу "http://192.168.1.49:10005/" не обращая внимания на результат (т.е. не перезагружая страницу тем ответом, который вернет сервер, то нужно использовать XMLHttpRequest (https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest) (работает и в ИЕ) или fetch (https://developer.mozilla.org/ru/docs/Web/API/Fetch_API) (более современные браузеры) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 07:42 |
|
Авто реконнект к серверу из JavaScript, полная перезагрузка страницы
|
|||
---|---|---|---|
#18+
Andi_WEB, В конце концов, если нужно просо обратиться по какому то URL никак не обрабатывая результат (не важно что пришло, есть ошибки или нет, то вместо window.location.href =("http://192.168.1.49:10005/"); можно просто new Image().src = "http://192.168.1.49:10005/"; ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 08:16 |
|
Авто реконнект к серверу из JavaScript, полная перезагрузка страницы
|
|||
---|---|---|---|
#18+
voraa, добрый день! Про Promise понял, спасибо. А дальше пока не совсем. Судя по всему, я не очень верно объяснил функционирование системы. В идеале, она должна работать так: 1. Соединение с сервером 2. Если соединение установлено, страницу не перегружаем, это важно, но постоянно мониторим доступность сервера, что канал жив 3. Если сервер не доступен, делаем попытки переподключения, но не постоянно, а только тогда, когда связь опять появилась и "ping", cкажем, стал менее 2 сек. Хотя, если попытки переподключения (или проверки) не приведут к скорейшему возникновению нежелательной ошибки типа "Не удается открыть эту страницу" , то данный пункт можно упростить, и просто, например, делать только попытки переподключения. Если я правильно понял, Вы как раз предлагаете внести изменения уже и в части, выполняющей проверку доступности сервера? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 11:53 |
|
Авто реконнект к серверу из JavaScript, полная перезагрузка страницы
|
|||
---|---|---|---|
#18+
И вот еще совсем не понятно - различное время до возникновения окончательной ошибки "Не удается открыть эту страницу", когда страница в браузере с моей обновляется на встроенную, и скрипт реконнекта перестает работать. Иногда ошибка "GET http://192.168.1.49:10005/?random-no-cache=1e50a net::ERR_CONNECTION_REFUSED" в консоли отладки Edge, когда специально отключаю сервер, может идти примерно часа полтора. И потом, когда восстанавливаю связь с сервером, все работает. То "Не удается открыть эту страницу" появляется спустя 15 минут. Утверждать пока не могу, но похоже, что когда открыта консоль отладки в браузере, ошибка не появляется. Во всяком случае, оставлял на полтора часа - скрипт все это время работал и потом прошел реконнект. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 17:33 |
|
Авто реконнект к серверу из JavaScript, полная перезагрузка страницы
|
|||
---|---|---|---|
#18+
Скажите, пожалуйста. Подумал тут, в порядке бреда - как я понимаю, в конечном итоге фатальное "Не удается открыть эту страницу" возникает после некоторого числа выполнений этой строки: img.src = url + '?random-no-cache=' + Math.floor((1 + Math.random()) * 0x10000).toString(16); А если вынести определение img за функцию, и немного изменить обработчик ошибки: вместо Is_Connected = "Lost"; сделать: Is_Connected = "Lost"; img.alt ="Not loaded"; Может, это повысит устойчивость всей схемы? Ошибка ведь возникает не сразу, а после довольно большого числа опросов сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2021, 23:34 |
|
|
start [/forum/topic.php?fid=22&msg=40072242&tid=1443232]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 348ms |
total: | 478ms |
0 / 0 |