|
|
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
Web-приложение построено на связке jsp-servlets. Страница пользователей должна среагировать в зависимости от действий одного из пользователей (любого). Раскрутил сокеты, но оказалось, что это, возможно, не то, что мне надо: сокет-сервер не может синициировать отправку пакета агенту - он откликается на запрос от агента (так ведь?). Вернулся к периодическим ajax-запросам, например, следующий запрос идет через секунду после возвращения предыдущего. Но, во-первых, такой способ все равно не является риал-тайм, во-вторых, при большом количестве людей и большом количестве открытых окон количество запросов достаточно большое, что меня смущает (хотя, возможно, можно и не смущаться - под приложение выделен отдельный сервак с двумя четырехядерными ксеонами и серьезным райд-контроллером, а также канал 4 мБ/сек). Я решил попробовать сделать задержку ответа сервером: наподобие сокет-сервера сделал цикл, из которого выходит только при создании какой-то реакции сервера, при которой надо обновлять страницу. Так как запрос асинхронный, клиента ничего не держит. Идея вроде замечательная - клиент сразу при получении предыдущего запроса посылает новый и просто ждет ответа сервера - все, что мне надо было. Но ... если открыть хотя бы 2 окошка, то эти, я так понимаю, "вечные" циклы (их всего 2) используют 100% производительности процессора, и уже даже похоронить томкет с трудом получается! Подскажите, плиз, как выкрутиться из данный ситуации? - а) можно ли обойти такую загрузку процессора, причем, не просто уменьшить, а практически свести к нулю; или б) все-таки использовать сокеты и постоянно опрашивать сокет-сервер на предмет изменений состояния на сервере? Можно серьезную конструктивную идею? Или есть еще варианты? (клиентское приложение или апплет не подходит) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2007, 18:16:58 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
Раскрутил сокеты, но оказалось, что это, возможно, не то, что мне надо: сокет-сервер не может синициировать отправку пакета агенту - он откликается на запрос от агента (так ведь?). Чё-то я не совсем понимаю что ты имеешь в виду. Иницировать соединение с серверным сокетом может только клиент. Но после того как соединение установлено запросы/ответы могут идти в обе стороны, это уже от протокола зависит. В протоколе HTTP например запросы идут только от клиента к серверу, в протоколе SMPP (есть такой протокольчик) запросы может иницировать как сервер так и клиент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2007, 18:59:43 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
:) Я хочу реализовать способ реакции окна клиента на изменения на сервере. А как это сделать, в принципе, все равно. Показал, чем попробовал это сделать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2007, 21:48:10 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
IDVsbruck:) Я хочу реализовать способ реакции окна клиента на изменения на сервере. А как это сделать, в принципе, все равно. Показал, чем попробовал это сделать ... AJAX или апплет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2007, 21:52:21 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
А сколько пользователей-то будет? Для больших нагрузок есть всяческие специальные сервера, которые умеют держать долгие коннекции для очень большого числа пользователей (десятки тысяч одновременно). И в случае с AJAX какое значение имеет RAID? Ведь нужно только знать в каждый момент времени, случилось ли некоторое "глобальное" событие или нет - а этот флаг проще прямо в памяти держать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 10:33:06 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
Пользователей может быть очень много. У каждого может быть много окон ... Райд не при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 16:49:57 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
Наконец-то получил для себя самый важный ответ: при открытом сокете сервер может сам инициировать передачу данных клиенту. В связи с этим реализовать передачу данных при изменениях на сервере (когда другие клиенты вносят изменения) не представляется сложным: в вечном цикле идет отправка данных только если они изменены. Однако остался очень важный вопрос: если сервер инициирует отправку данных, то эти данные получат все подключившиеся к сокету ... а как сделать разделение получения данных??? (возможно, я просто недопонимаю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 18:20:02 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
IDVsbruckНаконец-то получил для себя самый важный ответ: при открытом сокете сервер может сам инициировать передачу данных клиенту. В связи с этим реализовать передачу данных при изменениях на сервере (когда другие клиенты вносят изменения) не представляется сложным: в вечном цикле идет отправка данных только если они изменены. Однако остался очень важный вопрос: если сервер инициирует отправку данных, то эти данные получат все подключившиеся к сокету ... а как сделать разделение получения данных??? (возможно, я просто недопонимаю) Может быть вы наконец потрудитесь 10 минут и напишите сервер с клиентом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 18:42:59 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
:) А как же иначе? Даже больше потратил времени ... Сокет-сервер пока достаточно примитивный, так сказать, стандартный. А клиент - XMLSocket из флеша. Причем, для обновления содержимого страницы (когда там текстовая информация или нужно простое получение данных) также использую флеш, как сокет-клиент и ретранслятор. Просто перечитал кучу литературы и везде все реализовано как джава-сокет-сервер и джава-сокет-клиент, причем, все объяснения крутятся вокруг ситуации, когда клиент отсылает запрос, а сервер отвечает или передает бинарные данные. А аналога своей ситуации так и не нашел, поэтому домысливаю и пытаюсь найти ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 21:00:07 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
Тестовый сервер выглядит так: Код: 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. В дальнейшем изменяя переменную data, будут отсылаться соответствующие данные. Но возникла проблема: запуск одного клиента полностью загружает память - что это может быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 02:16:52 |
|
||
|
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 09:49:00 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34902348&tid=2144159]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 320ms |
| total: | 496ms |

| 0 / 0 |
