Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764

Отследить изменение файла на сайте

11.12.2016, 15:08. Показов 3007. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нашел пример для отслеживания изменения файла на сайте:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var spawn = require('child_process').spawn;
var http = require("http");
//запускаем tail -f
var tail = spawn('tail', ['-f', 'data.txt']);
console.log("Start tailing"); 
tail.stdout.addListener("data", function (data) { console.log(data);
//дублируем на консоль
});
var server = http.createServer(function(req,res) {
res.writeHead(200,{"Content-Type": "text/html"});
res.write("<p><h1>Start tailing</h1></p>"); 
tail.stdout.addListener("data", function (data) { res.write(data); }); 
//response.end();
});
server.listen(8000);
как интегрировать в страницу не запуская сервер node.js?
PHP/HTML
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
<!DOCTYPE html/>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<textarea id="Txt" cols="80" rows="10"></textarea>
<script>
 
//сейчас делаю так
//но надо по событию изменения data.txt
window.onload = getFile();
setInterval(getFile,3000);
 
function getFile() {
    var txt = document.getElementById("Txt");
    txt.innerText=get_file_context("data.txt");
};  
    
function get_file_context(url) {    
    var req = null;
    try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {
        try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {
            try {req = new XMLHttpRequest();} catch(e) {}
        }
    }
    if (req == null) throw new Error('XMLHttpRequest not supported');
    req.open("GET", url, false);
    req.send(null);
    return req.responseText;
};
 
</script>
</body>
</html>
Добавлено через 22 часа 33 минуты
мда, отвечаю сам себе - походу никак.
нашел пример чата на node, без сервера node не получается.
хотелось бы обойтись традиционными ценностями
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2016, 15:08
Ответы с готовыми решениями:

Отследить изменения на web-сайте
Здравствуйте, уважаемые программисты. Прежде всего, поздравляю всех женщин с 8 марта!:kissing: Ну а теперь к вопросу: Как мне...

Как отследить копирование на сайте?
Добрый день, возможно ли с помощью JavaScript отследить нажатие кнопок ctrl+c и правую кнопку мыши (копирование), а затем записывать логи с...

Как отследить нажатие кнопки на сайте?
Всем привет! Интересует вопрос как отследить нажатие кнопки на сайте? Нажать ее можно с помощью DOM, а возможно ли отловить это нажатие? ...

10
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
03.01.2017, 14:11  [ТС]
сделал на socket.io
JavaScript
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
var tail;
var fname = './data.txt'
var tailFlag = false;
var clients = 0;
io.on('connection', (socket) => {
     clients++;
     console.log('connect: '+ clients);
     socket.emit('news',{value: 'connect: '+ clients});
     if (!tailFlag) {
        tailFlag = true;
        console.log('start tailing');
        tail = spawn('tail',['-f',fname]);
        tail.stdout.on('data', (data) => {
            io.sockets.emit('news',{value: data.toString()});
        });
    };
     socket.on('disconnect', () => {
     clients--;
     console.log('disconnect: '+ clients);
     if (!clients) {
        tail.kill();
        tailFlag = false;
        console.log('stop tailing');
    }
    });
    socket.on('error', (err) => {
        console.log(err.stack);
    });
});
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.01.2017, 01:18
А вам что именно нужно узнать то? Момент изменения файла что ли? Если так, то могу предложить chokidar, он вроде справляется с задачей отслеживания.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
04.01.2017, 03:23  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
могу предложить chokidar,
у него по докам поллинг 100 мсек, это много, нативный taii лучше имхо. есть программа, собирающая данные в реальном времени и рассылающая их по сети. я это делал на UDP сокетах со своим гуем, народ захотел доступа в браузере. как UDP в браузере получать - не пойму никак

Добавлено через 6 минут
лучше бы pipe сделать напрямую на node process, *счас разбираюсь как реализовать. идея то простая - типа получение времени с сервера

Добавлено через 1 час 45 минут
вроде как получилось
JavaScript
1
2
3
4
5
6
7
8
9
console.log('PID',process.pid);
process.stdin.resume();
process.stdin.on('data', (data) => {
     console.log('DATA:' + data);
    if (data == 'quit\n' ) process.exit();
});
process.stdin.on('error', (err) => {
     console.log('error:' + err);
});
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.01.2017, 14:42
Цитата Сообщение от vic5710 Посмотреть сообщение
у него по докам поллинг 100 мсек
Это если у него стандартный системный watch не сработает.

Добавлено через 14 секунд
Цитата Сообщение от vic5710 Посмотреть сообщение
у него по докам поллинг 100 мсек
Это если у него стандартный системный watch не сработает.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
04.01.2017, 15:05  [ТС]
fs.watch тоже пробовал, имхо и по отзывам в инете глючно. я сделал лет 10 назад на С++/Qt и проблем не знал.
в Node я новичок, пока много непонятно. пробую счас конструкцию
Bash
1
datastream | node_application
0
04.01.2017, 15:23

Не по теме:

Цитата Сообщение от vic5710 Посмотреть сообщение
fs.watch тоже пробовал
Чокидар это делает за тебя...

0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
04.01.2017, 15:53  [ТС]
проще и быстрее на С написать. тестовый вариант:
Bash
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
 
COUNT=0
while true
do 
 sleep 1
 COUNT=$(($COUNT + 1))
 VAR=$(echo $COUNT | md5)
 echo "COUNT:" $COUNT  $VAR
done
JavaScript
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
#!/usr/bin/env node
 
'use strict';
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Static = require('express').static;
 
app.use(Static(__dirname + '/'));
http.listen(8000, () => {
  console.log('listening on localhost:8000');
});
 
var clients = 0;
var flag = false;
io.on('connection', (socket) => {
     clients ++;
     console.log('connect:'+ clients,socket.id);
     socket.emit('news',{value: 'connect: '+ clients});
     if (!flag) {
        flag = true;
        process.stdin.resume();
        process.stdin.on('data', (data) => {
        //console.log(data);
        io.sockets.emit('news',{value: data.toString()});
        });
        console.log('start pipe');
     };
     socket.on('disconnect', () => {
     clients --;
     console.log('disconnect: '+ clients,socket.id);
     if (!clients) {
        flag = false;
        process.stdin.removeAllListeners('data');
        console.log('stop pipe');
    }
    });
    socket.on('error', (err) => {
        console.log(err.stack);
    });
});
Добавлено через 2 минуты
вот как бы еще без express обойтись, не подскажете?

Добавлено через 15 секунд
вот как бы еще без express обойтись, не подскажете?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.01.2017, 16:08
Цитата Сообщение от vic5710 Посмотреть сообщение
вот как бы еще без express обойтись, не подскажете?
Ради статики использовать экспресс... Ну это вы да, маханули. Вообще я бы посоветовал для статики использовать Apache или nginx.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
04.01.2017, 19:18  [ТС]
статика не нужна index.html только надо отдать

Добавлено через 6 минут
пример из сети взял

Добавлено через 3 часа 3 минуты
выпилил express
JavaScript
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
'use strict';
var fs = require('fs');
var html = fs.readFileSync('./index.html');
var http = require('http').createServer( (req,res) => {
 res.writeHead(200,{"Content-Type":"text/html"});
 res.end(html);
}).listen(8000);
 
console.log('listen port 8000');
var io = require('socket.io')(http);
var clients = 0;
var flag = false;
io.on('connection', (socket) => {
     clients ++;
     console.log('connect:'+ clients + ":" + socket.id);
     socket.emit('news',{value: 'connect: '+ clients});
     if (!flag) {
        flag = true;
        process.stdin.resume();
        process.stdin.on('data', (data) => {
        io.sockets.emit('news',{value: data.toString()});
        });
        console.log('start pipe');
     };
     socket.on('disconnect', () => {
     clients --;
     console.log('disconnect:'+ clients +":"+socket.id);
     if (!clients) {
        flag = false;
        process.stdin.removeAllListeners('data');
        console.log('stop pipe');
    }
    });
    socket.on('error', (err) => {
        console.log(err.stack);
    });
});
осталось выпилить socket.io
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
07.01.2017, 16:22  [ТС]
по рекомендации Кантора перешел на sockjs

Добавлено через 23 часа 40 минут
разница в том, что UDP не требует соединения и при посылки broadcast сообщения ОДИН раз все, кто слушает сокет, его получат. Проверено на практике давно уже. Но как я понял - в браузер это не впилишь. только своим приложением.классика жанра
во всех примерах socket.io/sockjs broadcast - посылка сообщениям ВСЕМ подключенным клиентам по очереди
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.01.2017, 16:22
Помогаю со студенческими работами здесь

Отследить изменения на сайте и распарсить страницу
Здраствуйте! Пытаюсь сделать клиент для одного сайта. Завис практически сразу. Умом понимаю, что нужно отпарсить или написать регулярку,...

Отследить изменение реестра
Привет, есть ли рабочий пример или кто-то поделиться теорией создания чтоб отследить любое изменение в реестре ?

Отследить Изменение Аттачмента
Нужно как-то понять, менялся аттачмент или нет (у пользователя есть такая возможность). Дата модификации не подходит, извлекать аттач на...

Отследить изменение div
Всем привет, Я чайник в js. Хочу сделать функцию или просто кусок кода, который бы отслеживал содержимое в div и если оно изменяется то...

Отследить изменение списка
Имеется список элементов, вводимых в ручную в BindingList по средствам DataGridView. Как отследить изменение элементов в BindingList?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru