Это может быть глупый вопрос для тех, кто уже обернул вокруг себя голову, и, возможно, мне просто нужно больше coffee.Websockets - Получение данных (опрос?)
Вопрос: При использовании websockets или ajax кажется, что все еще происходит опрос. Это верно?
Пример(не реальный проект): Я хочу, чтобы держать глаза на текстовый файл. Если мне не хватает чего-то (больше кофе?), Мне все равно не нужно a) Спросите у сервера, есть ли обновление, или b) Сообщить о проблеме У меня есть обновление; Через спящий PHP-код на заданное время или с петлей setTimeout на стороне клиента.
Вещи, которые я понимаю: Я определенно вижу преимущество уже с разговором между сервером и страницей. Я вижу, что я не отправляю HTTP-запросы. Поэтому я вижу преимущества.
Детали: Я всегда просто использовали xmlhttprequest, так что я решил проверить это вся WebSockets вещь, как от того, что я думал, что я понял, является то, что данные передаются клиенту в режиме реального времени, но, как было сказано выше, если мне не хватает чего-то или какой-то логики здесь, мне кажется, что мне еще нужно либо сообщить php, либо javascript, чтобы проверять интервалы для данных, иначе данные отправляются в бесконечном цикле (представьте, что вы делаете вызов mysql).
Возможно, моя логика в моем коде - это все виды плохого. Вы можете просмотреть его. Из всех примеров, которые я нашел, все, кажется, просто запустить бесконечный цикл в PHP
PHP (минус все соединительного жаргоне)
while(true) {
// update once a second
$this->send($client, file_get_contents('/my/file/test.txt'));
sleep(1);
}
Javascript
var websocket = new WebSocket("ws://mysite.com:12345");
websocket.onmessage = function(str) {
console.log(str.data);
};
Я просто не понимаю логику этого, как я могу сделать это в режиме реального времени без какого-либо опроса. Возможно, так оно и должно работать.
Я понимаю, что если я удалю сон из кода php, все будет намного больше в реальном времени, слишком много, но похоже, что он будет бесконечно опробовать файл в приведенном выше примере, и это кажется неправильным.
Редактировать: Чтобы уточнить, я специально не ищу конкретное решение для просмотра текстового файла. Возможно, вы подумали об этом, если у вас возник вопрос.
Редактировать: Будущие посетители, ответ на этот вопрос: вместо того, чтобы специально следить за изменениями, когда пользователь отправляет изменения, вы отправляете изменения для открытия соединений.
Целью websocket/socket в общем случае является постоянное постоянное соединение, которое всегда открыто, поэтому в случае, если речь идет о программе чата. Клиенты получают данные, когда они доступны, они экономят пропускную способность, не имея для опроса/отправки на сервер каждые несколько секунд, чтобы показаться отзывчивым. Просто подождите и у вас получилось событие. Что касается мониторинга файла на стороне сервера, для этого требуется опрос. Но сервер сам опросит файл и отправит обновление всем клиентам, а не всем клиентам, проверяющим с сервером каждые несколько секунд, Websockets здесь все равно сэкономит вам пропускную способность. – Mayhem
Я полностью понимаю цель websockets. Вопрос касается опроса нового контента и того, как работает эта логика. – Jesse
Как уже говорилось, вы все равно будете локально проверять файл PHP, а затем уведомлять клиентов о том, когда обнаружено изменение, относительно того, как вы просматриваете файл. Это может различаться. Вы могли бы использовать задание CRON, но потребовали бы, чтобы сервер сокета работал на другом скрипте угроз/php. Возможно, используя http://php.net/manual/en/function.fam-monitor-file.php, но в остальном я будет просто иметь что-то вроде функции FAM, запущенной в основном цикле сервера сокета, если обнаружено, то отправить сообщение ко всем сообщениям. – Mayhem