(Tomcat) Непрерывно открытый сокет? Максимум одновременных с
От: Дм.Григорьев  
Дата: 17.01.08 20:25
Оценка:
Всем привет.

Подскажите плиз чем и как сделать непрерывно открытый сокет под Tomcat. Чтобы клиент отдал запрос на 8080, после чего клиент и сервер гоняют данные туда-сюда без всяких там HTTP-заголовков и прочей лабуды.

Также интересует, какого максимального количества одновременно открытых сокетов можно достичь на выделенном сервере.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re: (Tomcat) Непрерывно открытый сокет? Максимум одновременн
От: RobinHood  
Дата: 17.01.08 20:39
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Всем привет.


ДГ>Подскажите плиз чем и как сделать непрерывно открытый сокет под Tomcat. Чтобы клиент отдал запрос на 8080, после чего клиент и сервер гоняют данные туда-сюда без всяких там HTTP-заголовков и прочей лабуды.


ДГ>Также интересует, какого максимального количества одновременно открытых сокетов можно достичь на выделенном сервере.


Мне кажется что у работы томкат да впрочем и любого сервлет контейнера принципиально другой принцып работа.
http protocol ето stateless protocol(который работает по принцыпу запрос -- ответ).То что вы хотите сделать ето должен
быть какой небудь самописный socket server или использовать технологию ejb statefull beans , но ето уже не томкат а кокой небудь аппсервер типа jboss.Использование томкат в вашей задаче ето обязательное условие ???
Re[2]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Дм.Григорьев  
Дата: 17.01.08 20:46
Оценка:
Здравствуйте, RobinHood, Вы писали:

RH>Мне кажется что у работы томкат да впрочем и любого сервлет контейнера принципиально другой принцып работа.

RH>http protocol ето stateless protocol(который работает по принцыпу запрос -- ответ).

Угу.

RH>То что вы хотите сделать ето должен быть какой небудь самописный socket server


Мне пока в голову пришло только вешать <listener> в web.xml, чтобы он сам слушал какой-нить порт, отличный от 8080.

RH>или использовать технологию ejb statefull beans,


А с какого бока их можно прикрутить? Я имею в виду, что посадить резидентом сервис я и под томкатом смогу (см. выше). А SFSB предоставляют какие-нить удобства для работы с сокетом?

В двух словах, что мне нужно — это паттерн Observer, где генератор событий на Java-сервере, слушатели — на клиентах, причём клиентов до хрена и оповещаться они должны быстро. Если до хрена клиентов сервер не потянет, будем втыкать кластер.

RH>но ето уже не томкат а кокой небудь аппсервер типа jboss. Использование томкат в вашей задаче ето обязательное условие ???


Нет. JBoss годится.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[3]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Дм.Григорьев  
Дата: 17.01.08 20:50
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>А SFSB предоставляют какие-нить удобства для работы с сокетом?


Общение будет (скорее всего) в XML.

ДГ>Если до хрена клиентов сервер не потянет, будем втыкать кластер.


Но хотелось бы знать, на что примерно я могу расчитывать на одном выделенном сервере. Какой у кого есть опыт?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re: (Tomcat) Непрерывно открытый сокет? Максимум одновременн
От: Trean Беларусь http://axamit.com/
Дата: 17.01.08 20:55
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Всем привет.


ДГ>Подскажите плиз чем и как сделать непрерывно открытый сокет под Tomcat. Чтобы клиент отдал запрос на 8080, после чего клиент и сервер гоняют данные туда-сюда без всяких там HTTP-заголовков и прочей лабуды.


А по какому протоколу они будут гонять? Если HTTP, то никак, если другой протокол, то собственно и HTTP лабуды нет.

ДГ>Также интересует, какого максимального количества одновременно открытых сокетов можно достичь на выделенном сервере.


Я думаю это от операционки зависит.
Re[3]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: RobinHood  
Дата: 17.01.08 21:02
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Здравствуйте, RobinHood, Вы писали:


RH>>Мне кажется что у работы томкат да впрочем и любого сервлет контейнера принципиально другой принцып работа.

RH>>http protocol ето stateless protocol(который работает по принцыпу запрос -- ответ).

ДГ>Угу.


RH>>То что вы хотите сделать ето должен быть какой небудь самописный socket server


ДГ>Мне пока в голову пришло только вешать <listener> в web.xml, чтобы он сам слушал какой-нить порт, отличный от 8080.


RH>>или использовать технологию ejb statefull beans,


ДГ>А с какого бока их можно прикрутить? Я имею в виду, что посадить резидентом сервис я и под томкатом смогу (см. выше). А SFSB предоставляют какие-нить удобства для работы с сокетом?


ДГ>В двух словах, что мне нужно — это паттерн Observer, где генератор событий на Java-сервере, слушатели — на клиентах, причём клиентов до хрена и оповещаться они должны быстро. Если до хрена клиентов сервер не потянет, будем втыкать кластер.


RH>>но ето уже не томкат а кокой небудь аппсервер типа jboss. Использование томкат в вашей задаче ето обязательное условие ???


ДГ>Нет. JBoss годится.


сначала подумал про spring remoting , но ето мне тоже кажется не поможет. statefull bean eto тоже будет запрос -- ответ
но в рамках одной сесси.Я думаю что message driven bean тут может подойти. У тебя сервер будет генерировать события
и писать из в queue или topic(почитай в чем разница -- ето не сложно). а клиенты будут слушать и когда приходит в
очередь сообшение будут его из очереди читать.Если я не ошибаюсь в jboss очередь поддерживает cluster (и тучу всяких
других вкусностей).
Re[2]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Дм.Григорьев  
Дата: 17.01.08 21:23
Оценка:
Здравствуйте, Trean, Вы писали:

T>А по какому протоколу они будут гонять? Если HTTP, то никак, если другой протокол, то собственно и HTTP лабуды нет.


Я уже почти убедил сам себя, что нужен самописный сокет-сервер.

ДГ>>Также интересует, какого максимального количества одновременно открытых сокетов можно достичь на выделенном сервере.

T>Я думаю это от операционки зависит.

Linuх. Что там нынче на сервера модно ставить? CentOS 5?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[3]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: denis.zhdanov Россия http://denis-zhdanov.blogspot.com/
Дата: 18.01.08 06:35
Оценка: 3 (1)
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Я уже почти убедил сам себя, что нужен самописный сокет-сервер.


Тут надо еще учитывать наличие файерволов между клиентом и сервером. 80-ый порт обычно открыт, насчет кастомного порта таких гарантий дать нельзя.


ДГ>...
http://denis-zhdanov.blogspot.com
Re: (Tomcat) Непрерывно открытый сокет? Максимум одновременн
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 18.01.08 08:01
Оценка: 10 (2)
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Подскажите плиз чем и как сделать непрерывно открытый сокет под Tomcat. Чтобы клиент отдал запрос на 8080, после чего клиент и сервер гоняют данные туда-сюда без всяких там HTTP-заголовков и прочей лабуды.


Use "Comet", Luke!
Я ненавижу Hibernate!
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[3]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Trean Беларусь http://axamit.com/
Дата: 18.01.08 09:54
Оценка: 3 (1)
Здравствуйте, Дм.Григорьев, Вы писали:


ДГ>В двух словах, что мне нужно — это паттерн Observer, где генератор событий на Java-сервере, слушатели — на клиентах, причём клиентов до хрена и оповещаться они должны быстро. Если до хрена клиентов сервер не потянет, будем втыкать кластер.


Гм, я не знаю требований, но может вам что-нибудь поверх UDP (unicast/multicast) прикрутить используя Apache MINA? Так работает скайп, все биржи и пр. Единственно, что надо в application layer гарантировать упорядоченность пакетов и обрабатывать потерянные пакеты (если необходимо). Быстрее UDP врядли что-то есть, но конечно это посложнее будет, чем использовать какой-нибудь remoting-протокол.
Re[4]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Дм.Григорьев  
Дата: 18.01.08 09:58
Оценка:
Здравствуйте, Trean, Вы писали:

T>Гм, я не знаю требований, но может вам что-нибудь поверх UDP (unicast/multicast) прикрутить используя Apache MINA?


Заманчиво, но не пойдёт. TCP-only. Да и не по срокам мне ручками организовывать надёжную доставку. Я вообще надеялся этот слой за пару дней сделать, наивный.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[5]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Trean Беларусь http://axamit.com/
Дата: 18.01.08 10:10
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Здравствуйте, Trean, Вы писали:


T>>Гм, я не знаю требований, но может вам что-нибудь поверх UDP (unicast/multicast) прикрутить используя Apache MINA?


ДГ>Заманчиво, но не пойдёт. TCP-only. Да и не по срокам мне ручками организовывать надёжную доставку. Я вообще надеялся этот слой за пару дней сделать, наивный.


Ну выбор у вас небольшой: использование чужого протокола поверх TCP, использование самописного, плюсы и минусы думаю понятны. Apache MINA работает как с UDP так и с TCP/IP сокетами.
Re[6]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Дм.Григорьев  
Дата: 18.01.08 10:16
Оценка:
Здравствуйте, Trean, Вы писали:

T>Ну выбор у вас небольшой: использование чужого протокола поверх TCP, использование самописного, плюсы и минусы думаю понятны. Apache MINA работает как с UDP так и с TCP/IP сокетами.


Мне вот уже посоветовали
Автор: Andrei N.Sobchuck
Дата: 18.01.08
. Шикарная ссылка, сам бы я и не вспомнил про обслуживание нескольких клиентов одним потоком.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[2]: Java Comet Frameworks? (Flash client)
От: Дм.Григорьев  
Дата: 18.01.08 10:56
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Use "Comet", Luke!


Спасибо огромное, именно то, что нужно. А можете посоветовать сабж какой-нибудь? Клиент скорее всего будет Flash 9.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[2]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: Cyberax Марс  
Дата: 18.01.08 11:00
Оценка: 4 (1)
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ДГ>>Подскажите плиз чем и как сделать непрерывно открытый сокет под Tomcat. Чтобы клиент отдал запрос на 8080, после чего клиент и сервер гоняют данные туда-сюда без всяких там HTTP-заголовков и прочей лабуды.

ANS>Use "Comet", Luke!
Дополню: его очень удобно использовать в Jetty.
Sapienti sat!
Re[3]: Java Comet Frameworks? (Flash client)
От: yanys  
Дата: 18.01.08 11:09
Оценка: 6 (1)
ДГ>А можете посоветовать сабж какой-нибудь? Клиент скорее всего будет Flash 9.
Посмотрите на Jetty. Он выглядит неплохо и умеет Comet.
Re[3]: Comet + Flash client = как-то не по-человечески...
От: Дм.Григорьев  
Дата: 28.01.08 03:29
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Дополню: его очень удобно использовать в Jetty.


При использовании голых Continuations, сервер может отдавать клиенту данные, не закрывая HTTP response. Но клиент вынужден выполнять отдельный HTTP-запрос на каждую передачу. Сейчас смотрю сниффером написанный на флеше игровой портал, там флеш гонит на сервер данные, не выполняя отдельного HTTP-запроса на каждый пакет. HTTP-запрос выполняется только в самом начале, при установлении соединения. Причём на порт 80.

Вопрос: как такое сделать средствами Jetty? И стоит ли вообще? С другой стороны, если делать ручками, то как договариваться с теми, кто уже сидит на порту 80 или?
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Comet + Flash client = как-то не по-человечески...
От: Дм.Григорьев  
Дата: 28.01.08 03:42
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>При использовании голых Continuations, сервер может отдавать клиенту данные, не закрывая HTTP response. Но клиент вынужден выполнять отдельный HTTP-запрос на каждую передачу. Сейчас смотрю сниффером написанный на флеше игровой портал, там флеш гонит на сервер данные, не выполняя отдельного HTTP-запроса на каждый пакет. HTTP-запрос выполняется только в самом начале, при установлении соединения. Причём на порт 80.


ДГ>Вопрос: как такое сделать средствами Jetty? И стоит ли вообще? С другой стороны, если делать ручками, то как договариваться с теми, кто уже сидит на порту 80 или?


Я имел в виду, что сервлет в любом случае получает готовый запрос. Или нет?.. Допустим при file upload, Servlet.service() вызывается раньше, чем файл оказался целиком на сервере. Но как сделать бесконечный "file upload", без multipart boundaries и т.п.?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Comet + Flash client = как-то не по-человечески...
От: Аноним  
Дата: 31.01.08 21:08
Оценка:
HTTP-запрос выполняется только в самом начале, при установлении соединения. Причём на порт 80.

это и есть Comet. Эта технология несколько нарушает контракт http протокола , но.. работает. Порт 80 не занят для других соединений. В Томкате 6 есть поддержка Comet.
Re[5]: Comet + Flash client = как-то не по-человечески...
От: Дм.Григорьев  
Дата: 01.02.08 08:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>это и есть Comet. Эта технология несколько нарушает контракт http протокола , но.. работает. Порт 80 не занят для других соединений. В Томкате 6 есть поддержка Comet.


Вопрос только в том, как клиент ухитряется непрерывно слать данные через это соединение. Протокол Bayeux предполагает только непрерывную отдачу сервера.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[2]: (Tomcat) Непрерывно открытый сокет? Максимум одноврем
От: mi45  
Дата: 01.02.08 12:19
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Здравствуйте, Дм.Григорьев, Вы писали:


ДГ>>Подскажите плиз чем и как сделать непрерывно открытый сокет под Tomcat. Чтобы клиент отдал запрос на 8080, после чего клиент и сервер гоняют данные туда-сюда без всяких там HTTP-заголовков и прочей лабуды.


ANS>Use "Comet", Luke!


В дополнение могу дать ссылку на новую технологию Adobe'а BlazeDS(beta), данная технология будет актуальна для Flash клиентов. Также можно посмотреть результаты тестов здесь.
Re[6]: Comet + Flash client = как-то не по-человечески...
От: mselez  
Дата: 02.02.08 17:25
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Вопрос только в том, как клиент ухитряется непрерывно слать данные через это соединение. Протокол Bayeux предполагает только непрерывную отдачу сервера.


Действительно, интересно. Я не знаю наверняка, но могу предположить. Согласно http в хедере клиентского запроса POST должен быть указан размер пересылаемых данных. Это и есть главная проблема. Например, стандартный http клиент URLConnection даже не отправляет запрос (накапливает в буфере), пока не открыть inputThread (или попытаться прочитать HttpResponseCode), т.е. пока явно не перейти к чтению ответа, тем самым дав понять, что запрос окончательно сформирован. Но ведь можно использовать и самописный клиент. Открыть сокет, сформировать http хедер с указанием очень большого размера сообщения и отправлять данные по мере необходимости. Важно, чтобы сервера в интернете не вели себя подобно URLConnection, т.е. не накапливали данные, а сразу передавали по цепочке (что в их же интересах). Возможно, для этого надо указать в хедере режим chunked. И получится постоянное соединение. Однако на приемной стороне на каждое соединение обычно выделяется поток, что плохо, потому что количество потоков лимитировано. Поддержка этой технологии в Томкате стала возможна, когда реализовали обработку http запросов средствами nio, т.е. операции ввода\вывода всех клиентов обрабатываются одним потоком. Понятно, что должны быть также worker потоки, но все равно эффективность использования ресурсов выше.
Re[4]: Comet + Flash client = как-то не по-человечески...
От: Cyberax Марс  
Дата: 02.02.08 17:49
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

C>>Дополню: его очень удобно использовать в Jetty.

ДГ>При использовании голых Continuations, сервер может отдавать клиенту данные, не закрывая HTTP response. Но клиент вынужден выполнять отдельный HTTP-запрос на каждую передачу. Сейчас смотрю сниффером написанный на флеше игровой портал, там флеш гонит на сервер данные, не выполняя отдельного HTTP-запроса на каждый пакет. HTTP-запрос выполняется только в самом начале, при установлении соединения. Причём на порт 80.
Такое тоже можно сделать — просто в сервлете пишешь в ServletOutputStream и не забываешь делать flush().

Проблема одна — на каждого клиента требуется по потоку.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.