Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 03.09.2008
Сообщений: 53
1

Как узнать число юзеров на сервере

03.09.2008, 22:32. Показов 3908. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как узнать чколько пользователей зашло на сервер в данный момент, нужна авторизация типа больше 10 человек на сервер не пускать. Как это реализовать на JSP/Servlet
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2008, 22:32
Ответы с готовыми решениями:

Как узнать число посетителей на сервере
Как узнать чколько пользователей зашло на сервер в данный момент, нужна авторизация типа больше 10...

Как через IdFTP узнать количество юзеров, которые в данный момент подключены к хосту?
Проблема такая - есть несколько FTP клиентов, каждому из которых нужно подконектиться к хосту и...

Как узнать о сервере
Здравствуйте дорогие форумчане! Требуется ваша помощь! В руках оказался сервак, и мне надо...

Как узнать установлен ли nginx на сервере?
Добрый день, я выклал свой сайт на хостинге, меня интересует как можно узнать установлен ли у меня...

17
rookie
04.09.2008, 02:15 2
По моему это делается средствами сервера самого и JSP или Sеrvlet тут не причем
0 / 0 / 0
Регистрация: 03.09.2008
Сообщений: 53
04.09.2008, 12:39  [ТС] 3
А что конкретно может сервак, просто не пускать когда много народу или он выставляет какие-то переменные окружения так, что из них можно узнать число зашедших на сервак пользователей.
0
Sergey_
04.09.2008, 14:29 4
Ключевая задача в данном случае в определении текущего числа активных сессий. На базе сервлетов это можно реализовать так:

1. создаем переменную numberOfUserSessions, в которой будем держать число пользовательских сессий
2. создаем класс mySessionListener, который имплементит HttpSessionListener и пишем в sessionCreated() - numberOfUserSessions++, а в sessionDestroyed() - numberOfUserSessions--.
3. Регистрируем наш класс, как listener в web.xml (<listener>mySessionListener</listener>)

Замечу, что число активных сессий вообще говоря не равно числу пользователей на сайте, так как средствами сервлетов/JSP мы не можем отследить момент, когда пользователь решит закрыть свой броузер. Однако обычно в подобных ситуациях оценивают именно число сессий.
0 / 0 / 0
Регистрация: 21.07.2008
Сообщений: 21
16.10.2008, 14:54 5
мне нужно тоже самое только средствами сервлетов , без JSP....

thanks.
0
0 / 0 / 0
Регистрация: 03.09.2008
Сообщений: 53
16.10.2008, 22:43  [ТС] 6
У меня заработало. Могу пример прислать. но на jsp. Хотя разницы сервлет/jsp нету. Ведь jsp переходит в сервлет.
0
0 / 0 / 0
Регистрация: 21.07.2008
Сообщений: 21
17.10.2008, 01:02 7
я знаю, но надо servlet решение ...
0
mishgun
17.10.2008, 23:04 8
В данном случае необходимо создать сервлет с тем кодом про который уже говорили но зарегестрировать его в вебсервером как глобальный (или что то в этом роде).Только не забывать отслеживать сессии если юзер ушел тогда освобождать место
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
17.10.2008, 23:18 9
Насколько я знаю, понятие глобального для СЕРВЕРА пока что в спецификации не существует. Есть глобальный для КОНТЕКСТА, что не является искомым решением.

Возможное решение:

На КАЖДЫЙ контекст вешать фильтр, который централизованно хранит текущее состояние - DB, file, etc.

Сам сталкивался с такой необходимостью, знакомый чел. тоже. Если есть более удобные решения - plz.
0
0 / 0 / 0
Регистрация: 21.07.2008
Сообщений: 21
17.10.2008, 23:25 10
как вам такое решение ,,,,,
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
42
43
44
45
46
47
48
49
50
51
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class SessionBindings extends HttpServlet implements Runnable{
 
 Set users = Collections.synchronizedSet(new HashSet());
Thread kick=null;
public void init(){
    kick= new Thread(this);
    kick.start();
        } 
public void run(){
    while(true){
 
        System.out.println('users inside : '+users.size());
        Iterator i=users.iterator();
        while(i.hasNext()){
            
            HttpSession tmp=(HttpSession)i.next();
            int sec=(int)(new Date().getTime()- tmp.getLastAccessedTime())/1000;
            System.out.println('last access '+sec);
            if (sec>250) i.remove();
            }
        try{kick.sleep(4000);}
        catch(Exception e){
            
            }
        }
    }       
public void doGet(HttpServletRequest req, HttpServletResponse res)
                        throws ServletException, IOException {
res.setContentType('text/plain');
PrintWriter out = res.getWriter();
 
HttpSession session = req.getSession(true);
 
session.setAttribute('binding',new HttpSessionBindingListener(){
 
public void valueBound(HttpSessionBindingEvent event) {
users.add(event.getSession());  
}
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println('UNBOUND as '+ event.getSession().getId());
}
});
 
out.println('About Session');
}
 
}
0
mishgun
18.10.2008, 04:12 11
Я имел ввиду то что сервлет живет пока живет сервак.Например есть такой тул-JGenerator для Флеш написаный на Джаве(по сущности своей сервлет)так вот я устанавливал JRun так что бы он работал пока работает сервак. А глобально я упомянул чтоб понятнее было.
В конце концов если уж на то пошло пишете сервлетный бин и даете ему scope=global.И что ж это тогда?
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
18.10.2008, 04:54 12
Ну, такие штуки, как глобальные сервлетные бины - это хорошо, но:

1. Нестандартное
2. У каждого вендора копаться нужно по-своему.

Ты говоришь про JRun (я знаю, что это твоя тайная любовь , в поиске глянул - еще есть такое у ATG Dynamo (ну, это без комментариев), еще 1-2 контейнера и все.

Это как возиться со schedulers в J2EE - у каждого AS свой. Вроде в версии EJB 2.1 обещают стандартизировать, что-то уже даже есть для чтива.
0
mishgun
18.10.2008, 19:16 13
У Dynamo это называется Droplet и наследует от Servlet но уже измененный поэтому естественно работает только на Dynamo(я на нем работал поэтому знаю что и куда).С JRun же совсем другая ситуация.Там существует спец тул который позволяет регистрироавть сервлет с сервером что в сущности будет означать жизнь сервлета пока живет сервак.
А моя тайная любовь - это Intershop Enfinity ))) Так что тут вы не угадали
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
18.10.2008, 19:57 14
А реально эти исходники глянуть? И возможно ли расширить стандартный servlet invoker? Чтобы это все дело прикручивалось на любой servlet container?

Интересные мысли меня одолевают что-то...
0
mishgun
19.10.2008, 02:26 15
К сожалению сейчас на Dynamo уже не работаю. А исходники чего именно ты хочешь глянуть? Я ж говорю что ничего особенного в дроплете нету.Это сервлет но с проперти как у бина.
А в случае автора я бы сделал все таки обыкновенный бин вместо сервлета.Бины как раз и нужны что бы хранить какие то значения.А в бин передавать или номер сессии или саму сессию.
Korwin
19.10.2008, 03:11 16
А почему бы не сделать singleton class который имеет инфу о количестве
текущих усеров с каждого сервлета?
А сервлеты вызвают его при работе, а по завершению, дают. отбой.
Просто реализуется и делает то, что надо.
0 / 0 / 0
Регистрация: 21.07.2008
Сообщений: 21
20.10.2008, 01:45 17
to Korwin :

Более подробно пожалуйста , если можно код.
0
mishgun
20.10.2008, 04:41 18
дело в том что такой класс будет умирать каждый раз когда сервлеты дают ему отбой.А посему пишите бин как глобальный аппликейшн сервера.
20.10.2008, 04:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2008, 04:41
Помогаю со студенческими работами здесь

Как узнать время на MySQL сервере
Нужно отталкиваться от единого показателя времени - MySQL server. Можно ли каким запросом его...

Как узнать наличие определенного файла на сервере
Подскажите, как узнать наличие определенного файла на сервере. (что-то вроде fileexists)

как узнать вид ОС на сервере и номер IIS ?
естьли возможность узнать, что стоит на web сервере - windows NT Server Или 2000 Server ? выбор...

Как узнать версию файла на ФТП сервере?
Привет, друзья. Помогите узнать версию файла на ФТП сервере. А то после некоторых поисков на ум...

Как узнать, исполняется код на сервере или на клиенте?
Подскажите, пожалуйста

Как можно узнать структуру баз на сервере Oracle?
Такой вопрос: как можно узнать структуру баз на Ораклавском сервере. Неожиданно понадобилось,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru