Это - просто соглашение. На самом деле даже основное имя (), и аргументы передало в, просто соглашение.
то, Когда Вы выполняете 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' классы в проекте.
Если вы хотите, чтобы это работало только на странице 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>
Надеюсь, это поможет вам.
В общем случае невозможно узнать, когда пользователь покидает вашу страницу.
Но вы можете делать что-то за кулисами, чтобы они часто загружали что-то с вашего сервера, пока они ' повторно на странице, например. загрузив
с некоторым содержимым, которое перезагружается каждую минуту:
<meta http-equiv="refresh" content="60">
Это вызовет небольшую дополнительную нагрузку на сервер, но он будет делать то, что вы хотите (если не со вторым).
А как работает чат? Это система чата на основе Ajax?
Системы чата на основе Ajax работают, когда клиенты постоянно обращаются к серверу чата, чтобы узнать, есть ли новые сообщения в очереди. Если это так, вы можете обновить онлайн-статус пользователя либо в файле cookie, либо в сеансе PHP (конечно, при условии, что вы используете PHP). Затем вы можете установить время ожидания в сети немного дольше, чем частота обновления.
То есть, если ваша система чата обычно запрашивает новые сообщения с сервера каждые 5 секунд, то вы можете предположить, что любой пользователь, который не отправил запрос на 10-15 секунд больше не находится на странице чата.
Если вы не используете систему чата на основе ajax (возможно, Java или что-то в этом роде), тогда вы все равно можете сделать то же самое, добавив запрос ajax, который периодически отправляется на сервер, чтобы установить, находится ли пользователь в сети.
Я бы не предлагал хранить эту информацию о статусе онлайн в базе данных. Запросы к базе данных каждые пару секунд, чтобы узнать, кто находится в сети, а кто нет, требует больших ресурсов, особенно если это большой сайт. Вы должны кэшировать эту информацию и работать с кешем (очень быстро) по сравнению с базой данных (для сравнения, очень медленно).
Вопрос помечен как "jquery" - а как насчет решения javascript? Вместо meta / refresh вы можете использовать window.setInterval () , выполнить ajax-запрос и предоставить что-то «полезное», например, обновленный список «кто в сети» (если вы считаете, что полезно; -))
Я не пробовал это, поэтому отнеситесь к этому с недоверием: установите обработчик событий для window.onunload, который уведомляет сервер, когда пользователь покидает страницу. Некоторые проблемы с этим: 1.) событие не сработает, если браузер или компьютер выйдет из строя, и 2.) если у пользователя есть два экземпляра страницы индекса, открытые и закрывающие один, они будут выходить из системы, если вы не реализуете подсчет ссылок. . Само по себе это не надежно, но в сочетании с методом опроса Джонатана должно позволить вам иметь довольно хорошее время ответа и большие интервалы между обновлениями.