powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
12 сообщений из 12, страница 1 из 1
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34900053
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Web-приложение построено на связке jsp-servlets.
Страница пользователей должна среагировать в зависимости от действий одного из пользователей (любого). Раскрутил сокеты, но оказалось, что это, возможно, не то, что мне надо: сокет-сервер не может синициировать отправку пакета агенту - он откликается на запрос от агента (так ведь?).

Вернулся к периодическим ajax-запросам, например, следующий запрос идет через секунду после возвращения предыдущего. Но, во-первых, такой способ все равно не является риал-тайм, во-вторых, при большом количестве людей и большом количестве открытых окон количество запросов достаточно большое, что меня смущает (хотя, возможно, можно и не смущаться - под приложение выделен отдельный сервак с двумя четырехядерными ксеонами и серьезным райд-контроллером, а также канал 4 мБ/сек).
Я решил попробовать сделать задержку ответа сервером: наподобие сокет-сервера сделал цикл, из которого выходит только при создании какой-то реакции сервера, при которой надо обновлять страницу. Так как запрос асинхронный, клиента ничего не держит. Идея вроде замечательная - клиент сразу при получении предыдущего запроса посылает новый и просто ждет ответа сервера - все, что мне надо было. Но ... если открыть хотя бы 2 окошка, то эти, я так понимаю, "вечные" циклы (их всего 2) используют 100% производительности процессора, и уже даже похоронить томкет с трудом получается!

Подскажите, плиз, как выкрутиться из данный ситуации? - а) можно ли обойти такую загрузку процессора, причем, не просто уменьшить, а практически свести к нулю; или б) все-таки использовать сокеты и постоянно опрашивать сокет-сервер на предмет изменений состояния на сервере? Можно серьезную конструктивную идею? Или есть еще варианты? (клиентское приложение или апплет не подходит)
Спасибо.
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34900086
smskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раскрутил сокеты, но оказалось, что это, возможно, не то, что мне надо: сокет-сервер не может синициировать отправку пакета агенту - он откликается на запрос от агента (так ведь?).

Чё-то я не совсем понимаю что ты имеешь в виду. Иницировать соединение с серверным сокетом может только клиент. Но после того как соединение установлено запросы/ответы могут идти в обе стороны, это уже от протокола зависит. В протоколе HTTP например запросы идут только от клиента к серверу, в протоколе SMPP (есть такой протокольчик) запросы может иницировать как сервер так и клиент.
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34900198
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) Я хочу реализовать способ реакции окна клиента на изменения на сервере. А как это сделать, в принципе, все равно. Показал, чем попробовал это сделать ...
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34900204
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck:) Я хочу реализовать способ реакции окна клиента на изменения на сервере. А как это сделать, в принципе, все равно. Показал, чем попробовал это сделать ...
AJAX или апплет
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34900669
DPH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DPH
Гость
А сколько пользователей-то будет?

Для больших нагрузок есть всяческие специальные сервера, которые умеют держать долгие коннекции для очень большого числа пользователей (десятки тысяч одновременно).

И в случае с AJAX какое значение имеет RAID? Ведь нужно только знать в каждый момент времени, случилось ли некоторое "глобальное" событие или нет - а этот флаг проще прямо в памяти держать.
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34902348
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователей может быть очень много. У каждого может быть много окон ...
Райд не при чем.
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34902787
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец-то получил для себя самый важный ответ: при открытом сокете сервер может сам инициировать передачу данных клиенту.

В связи с этим реализовать передачу данных при изменениях на сервере (когда другие клиенты вносят изменения) не представляется сложным: в вечном цикле идет отправка данных только если они изменены. Однако остался очень важный вопрос: если сервер инициирует отправку данных, то эти данные получат все подключившиеся к сокету ... а как сделать разделение получения данных??? (возможно, я просто недопонимаю)
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34902840
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckНаконец-то получил для себя самый важный ответ: при открытом сокете сервер может сам инициировать передачу данных клиенту.

В связи с этим реализовать передачу данных при изменениях на сервере (когда другие клиенты вносят изменения) не представляется сложным: в вечном цикле идет отправка данных только если они изменены. Однако остался очень важный вопрос: если сервер инициирует отправку данных, то эти данные получат все подключившиеся к сокету ... а как сделать разделение получения данных??? (возможно, я просто недопонимаю)
Может быть вы наконец потрудитесь 10 минут и напишите сервер с клиентом?
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34903099
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) А как же иначе? Даже больше потратил времени ...

Сокет-сервер пока достаточно примитивный, так сказать, стандартный.
А клиент - XMLSocket из флеша. Причем, для обновления содержимого страницы (когда там текстовая информация или нужно простое получение данных) также использую флеш, как сокет-клиент и ретранслятор.

Просто перечитал кучу литературы и везде все реализовано как джава-сокет-сервер и джава-сокет-клиент, причем, все объяснения крутятся вокруг ситуации, когда клиент отсылает запрос, а сервер отвечает или передает бинарные данные. А аналога своей ситуации так и не нашел, поэтому домысливаю и пытаюсь найти ответы.
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34903339
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тестовый сервер выглядит так:

Код: 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.
 import  java.io.*;
 import  java.net.ServerSocket;
 import  java.net.Socket;

 public   class  Server  implements  Runnable
{
	 public   void  run()
	{
		ServerSocket serverSocket =  null ;
		 try  {
			serverSocket =  new  ServerSocket( 4321 );
		}  catch  (Exception exception) {
			exception.printStackTrace();
			System.exit( 0 );
		}
		 while  (true) {
			 try  {
				 new  ServerTask(serverSocket.accept()).start();
			}  catch  (Exception exception) {
				exception.printStackTrace();
				System.exit( 0 );
			}
		}
	}

	 private   class  ServerTask  extends  Thread
	{
		 private  Socket socket;
		 private  String data;

		 public  ServerTask(Socket _socket)
		{
			 this .socket = _socket;
		}

		 public   void  run()
		{
			 try  {
				 while  (true) {
					OutputStream outputStream = socket.getOutputStream();
					InputStream testInputStream =  new  ByteArrayInputStream("hello".getBytes());
					 byte  buf[] =  new   byte [ 64  *  1024 ];
					 int  r = testInputStream.read(buf);
					data =  new  String(buf,  0 , r +  1 );
					data = "Get: " + data;
					outputStream.write(data.getBytes());
					outputStream.flush();
				}
			}  catch  (Exception exception) {
				exception.printStackTrace();
				 if  (!socket.isClosed()) {
					 try  {
						socket.close();
					}  catch  (Exception ee) {
						exception.printStackTrace();
					}
				}
			}
		}
	}
}

В дальнейшем изменяя переменную data, будут отсылаться соответствующие данные.
Но возникла проблема: запуск одного клиента полностью загружает память - что это может быть?
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34903621
Nevolin Alexandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
    #34906086
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статья просто супер! Много раз слышал "Jetty", "Comet", но не приходилось сталкиваться по причине незнания. Спасибо.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Sockets vs Request по таймауту - ка лучше получить реакцию сервера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]