Как Отследить Онлайн-статус Пользователей моего WebSite?

Это - просто соглашение. На самом деле даже основное имя (), и аргументы передало в, просто соглашение.

то, Когда Вы выполняете java.exe (или javaw.exe в Windows), что действительно происходит, является несколькими вызовами Собственного интерфейса Java (JNI). Эти вызовы загружают DLL, который является действительно JVM (правильно - java.exe НЕ является JVM). JNI является инструментом, который мы используем, когда мы должны соединить мостом мир виртуальной машины и мир C, C++, и т.д... Реверс также верен - не возможно (по крайней мере, к моему знанию) на самом деле получить JVM, работающую, не используя JNI.

В основном, java.exe является супер простым приложением C, которое анализирует командную строку, создает новый Массив строк в JVM для содержания тех аргументов, синтаксические анализы, имя класса, которое Вы определили как содержащий основной (), использует вызовы JNI для нахождения основного () самим методом, затем вызывает основное () метод, передающий в недавно созданном массиве строк в качестве параметра. Это очень, очень как то, что Вы делаете при использовании отражения от Java - это просто использует смутно названные собственные вызовы функции вместо этого.

было бы совершенно законно для Вас записать Вашу собственную версию java.exe (источник распределяется с JDK), и имейте его, делают что-то совершенно различное. На самом деле это точно, что мы делаем со всеми нашими основанными на Java приложениями.

Каждое из наших приложений Java имеет свое собственное средство запуска. Мы, прежде всего, делаем это так, мы получаем наш собственный значок и обрабатываем имя, но это пригодилось в других ситуациях, где мы хотим сделать что-то помимо регулярного основного (), звонят для получения вещей, идущих (Например, в одном случае, мы делаем совместимость COM, и мы на самом деле передаем дескриптор COM в основной () вместо массива строк).

Так, длинный и короткий: причиной это статично, является b/c, это удобно. Причина это называют 'основным', состоит в том, что это должно было быть что-то, и основной () то, что они сделали в былые времена C (и в те дни, название функции было важно). Я предполагаю, что java.exe, возможно, позволил Вам просто определять полностью определенное имя основного метода вместо просто класса (Java com.mycompany. Foo.someSpecialMain) - но это просто делает его тяжелее на IDE, чтобы автоматически обнаружить 'launchable' классы в проекте.

14
задан Vadim Kotov 11 August 2017 в 14:01
поделиться

5 ответов

Полное решение. От начала до конца.

Если вы хотите, чтобы это работало только на странице index.php, вы можете отправлять обновления на сервер асинхронно (в стиле AJAX), предупреждая сервер о том, что $ _ SESSION ["userid"] все еще в сети.

setInterval("update()", 10000); // Update every 10 seconds

function update() {
  $.post("update.php"); // Sends request to update.php
}

Ваш файл update.php будет иметь такой код:

session_start();
if ($_SESSION["userid"])
  updateUserStatus($_SESSION["userid"]);

Все это предполагает, что вы сохраняете свой идентификатор пользователя как переменную сеанса, когда пользователи входят на ваш сайт. Функция updateUserStatus () представляет собой простой запрос, например следующий:

UPDATE users 
SET lastActiveTime = NOW()
WHERE userid = $userid

Итак, это позаботится о вашем хранилище. Теперь, чтобы получить список пользователей, которые находятся «в сети». Для этого вам понадобится еще один вызов jQuery и еще один вызов setInterval ():

setInterval("getList()", 10000) // Get users-online every 10 seconds

function getList() {
  $.post("getList.php", function(list) {
    $("listBox").html(list);
  });
}

Эта функция запрашивает часть HTML-кода с сервера каждые 10 секунд. Страница getList.php будет выглядеть так:

session_start();
if (!$_SESSION["userid"])
  die; // Don't give the list to anybody not logged in

$users = getOnlineUsers(); /* Gets all users with lastActiveTime within the
                              last 1 minute */

$output = "<ul>";
foreach ($users as $user) {
  $output .= "<li>".$user["userName"]."</li>";
}
$output .= "</ul>";

print $output;

Это выведет следующий HTML:

<ul>
  <li>Jonathan Sampson</li>
  <li>Paolo Bergantino</li>
  <li>John Skeet</li>
</ul>

Этот список включен в вашу переменную jQuery с именем «list». Посмотрите назад в наш последний блок jQuery, и вы увидите его там.

jQuery возьмет этот список и поместит его в блок div с именем класса «listBox».

<div class="listBox"></div>

Надеюсь, это поможет вам.

21
ответ дан 1 December 2019 в 12:53
поделиться

В общем случае невозможно узнать, когда пользователь покидает вашу страницу.

Но вы можете делать что-то за кулисами, чтобы они часто загружали что-то с вашего сервера, пока они ' повторно на странице, например. загрузив