Форум русской поддержки Joomla!® CMS
03.12.2016, 06:32:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Вопрос о setInterval ()

 (Прочитано 700 раз)
0 Пользователей и 1 Гость смотрят эту тему.
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« : 13.02.2016, 14:48:21 »

Написал на php код который обращаеться к базе данных. Php файл запускается с помощью setInterval(function() {$('#myClass').load("new.php");}, 5000); . Этот скрипт будет запускаться на Joomle в материалах с доступом на 3 человека. Вопрос могут ли произойти сбои или зависания из за  3 постоянных (5000 млс ) обращения к серверу ? и еще как можно отключить setInterval() если человек перешел на другую страницу...

Заранее спасибо за помощь ! (я чайник если что то  Grin Grin Grin)
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #1 : 13.02.2016, 16:25:21 »

очень размытый вопрос. одно дело, если у вас new.php выполняется 1/100000 секунды, и совсем другое дело, если он выполняется скажем 10 секунд.
в целом, судя по написанному, подход скорее всего выбран неверный.
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #2 : 13.02.2016, 17:27:11 »

php выбирает столбцы из базы данных и печатает. Интервал будет примерно где то 30 секунд или 1 минута.
будет печататься у 3 их людей .

как отключать  setInterval  при переходе на другую страницу и после возвращения   включать?
Записан
dmitry_stas
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7732



« Ответ #3 : 13.02.2016, 17:56:44 »

вы имеете в виду "при переходе на другую страницу" - это не собственно переход, а просто переключение между вкладками?
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #4 : 13.02.2016, 18:06:27 »

да да
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #5 : 13.02.2016, 18:07:54 »

если он смотрит этот материал сетинтервал работал, если он переключился на другой материал чтоб сетинтервал не работал   
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1434


« Ответ #6 : 13.02.2016, 18:14:50 »

Его нельзя поставить на паузу - можно только выключить при событии blur и включить опять при событии focus. Для чего это нужно? Похоже на г-код.
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #7 : 13.02.2016, 18:42:21 »

пускай  остановиться и заного включиться. как написать код?
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1434


« Ответ #8 : 13.02.2016, 18:48:30 »

Код:
var interval = setInterval(...)
Код:
$(window).on('blur', function(){
    clearInterval(interval)
})
Код:
$(window).on('focus', function(){
    interval = setInterval(...)
})
Записан
buyanov
Осваиваюсь на форуме
***

Репутация: +22/-0
Offline Offline

Пол: Мужской
Сообщений: 150


Сайты 74


« Ответ #9 : 13.02.2016, 18:54:19 »

Этот скрипт будет запускаться на Joomle в материалах с доступом на 3 человека. Вопрос могут ли произойти сбои или зависания из за  3 постоянных (5000 млс ) обращения к серверу ? и еще как можно отключить setInterval() если человек перешел на другую страницу...
Никогда так не делайте.
Вообще никогда...
Даже если очень хочется.

Используйте сокеты или лонг-поллинг. К тому же постоянные запросы к БД будут грузить базу, еще хуже то, что PHP будет хавать память. Можно конечно взять сервак и тд. Но сам подход не очень.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #10 : 13.02.2016, 19:03:15 »

Большинство AJAX чатов так работает. Это не круто конечно, но сервер/БД не умрет если его каждые 5 секунд будут запрашивать, иначе что это за сервер такой?
« Последнее редактирование: 13.02.2016, 19:12:57 от zomby6888 » Записан
buyanov
Осваиваюсь на форуме
***

Репутация: +22/-0
Offline Offline

Пол: Мужской
Сообщений: 150


Сайты 74


« Ответ #11 : 13.02.2016, 19:12:32 »

Большинство AJAX чатов так работает. Это не круто конечно, но сервер/БД не умрет если его каждые 5 секунд будут запрашивать
То что большинство так работает это не показатель - это раз. Если человеку оторвать ногу он тоже не умрет - это два.
Есть берешься что-то сам написать то сначала надо посмотреть то что уже написано сообществом, и если по каким-то причинам все не подошло пишем все грамотно, тогда и проблем не возникнет.
Я не в обиду просто если есть возможность использовать что-то получше то стоит этим воспользоваться =)
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #12 : 13.02.2016, 19:24:56 »

buyanov а можете написать  свой код который получше  , а то я не разбираюсь в сокетах или лонг-поллинг-ах. )
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #13 : 13.02.2016, 19:30:58 »

Филипп Сорокин спасибо ваш код работает как часы )
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #14 : 13.02.2016, 19:37:36 »

Ну я бы вообще использовал какой нибудь серверный js вроде nodejs или angularjs. Но это сложно и долго.
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #15 : 13.02.2016, 19:42:51 »

у меня будут  запросы идти  от 3 ох человек  , а интервал могу поставить каждые 1 минуты
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1434


« Ответ #16 : 13.02.2016, 19:51:33 »

Филипп Сорокин спасибо ваш код работает как часы )

Спасибо - в карму Wink
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #17 : 13.02.2016, 23:07:08 »

Филипп Сорокин плюсанул карму, у меня возникла проблема есть селект и импут на  том же файле. как написать чтоб когда мышь на этом селекте или импуте (или на этой форме) то setInterval остановился, а если мышь не на нем работала ?
« Последнее редактирование: 13.02.2016, 23:13:27 от hamo » Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1434


« Ответ #18 : 13.02.2016, 23:50:23 »

Всё аналогично:

Код:
$('#input-id').on('focus', function() {
    ...
})
Записан
buyanov
Осваиваюсь на форуме
***

Репутация: +22/-0
Offline Offline

Пол: Мужской
Сообщений: 150


Сайты 74


« Ответ #19 : 14.02.2016, 04:23:22 »

С сокетами конечно лучше на сервере использовать Node.js как уже писали выше.

Но с меня пример =)

Серверная часть у нас будет на PHP создадим какую-нибудь папку в корне сайта (я создал sockets)
Файловая структура проекта:
Код:
sockets
|-- bin
     |-- server.php
|-- logs
|-- src
     |-- App
          |--ws.php
|-- composer.json
|-- index.html

Для работы с вебсокетами на PHP я буду использовать библиотеку Ratchet
1. Подготовим проект нашего приложения с помощью Composer
Создадим composer.json
Показать текстовый блок
2. Пишем класс WS который будет осуществлять "общение" с клиентами
Сохраняем в /sockets/src/App/ws.php
Показать текстовый блок
3. Пишем простенький сервер
Сохраняем в /sockets/bin/server.php
Показать текстовый блок
4. Устанавливаем с помощью Composer зависимости для этого просто запускаем
Код:
composer install
5. Пишем клиента на JS
Сохраняем куда хотим я положил в туже папку /sockets/index.html
Показать текстовый блок

Тут нужно поменять только адрес нашего сервера у меня на виртуалке домен local.dev сервер я буду запускать на 8080 порту
6. Запускаем из папки sockets
Код:
php bin/server.php

в консоль будут падать сообщения

7. Заходим на страницу у (меня http://local.dev/sockets/index.html) в консоли будет видно время с сервера!

8*. Когда наиграемся и решим что пора в бой, наш сервер нужно запустить в фоне (куча статей про демонов на PHP) я поступлю с ним вот так =) отправлю в фон с помощью nohup
Код:
nohup php -q bin/server.php > logs/server.log 2>&1 &
сообщения перенаправим в server.log

Ну вот как-то так получается =) Удачи в изучении вебсокетов!

Список литературы:

Документация по Ratchet - http://socketo.me
WebSocket JS клиент - https://learn.javascript.ru/websockets
Статейка с хабра - https://habrahabr.ru/post/79038/
« Последнее редактирование: 14.02.2016, 04:27:46 от buyanov » Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #20 : 14.02.2016, 16:25:16 »

buyanov спасибо за помощь, я тебе плюсанул тоже, но я вообще  с Node.js  и с сокетами не знаком. трудновато как то (((( А не будеть работать если я напишу с помощью сетинтервал ?, вед на сервер будут делать запросы 3 человека  раз в 1 минуту (могу и дольше поставить например до 5 и минут): Мне код сейчас нужен, а чтоб писать на вебсокетах, надо их изучать (((
Записан
buyanov
Осваиваюсь на форуме
***

Репутация: +22/-0
Offline Offline

Пол: Мужской
Сообщений: 150


Сайты 74


« Ответ #21 : 14.02.2016, 20:45:17 »

Спасибо  Wink Да я видел что уже зарешали вроде  Smiley Просто написал мало ли, не сейчас так позже пригодится, а может кому-то другому понадобится =)

Просто подход с setInterval() не самый удачный, но при таких условиях (это бэкэнд и нужно 3 юзерам) можно и закрыть на это глаза и сэкономить время.

А и да. Чет так и не понял пример без сокетов нужен?
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #22 : 15.02.2016, 23:01:37 »

народ помогите пожалуйста, мне нужно раз 1 минут обновлять  list.php который находится administrator/components/com_jshopping/views/orders/tmpl/list.php . ну это файл который показывает заказы в JoomShopping. Пробую с помощью setInterval() выдает ошибку Restricted access ((((( как можно решить эту проблему?
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #23 : 15.02.2016, 23:02:23 »

buyanov да ничего не понял )) давай без сокетов пример ))
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #24 : 15.02.2016, 23:14:49 »

Филипп Сорокин setInterval() не останавливается в mozille, работает только в Google и то с какими то паузами, 5 раз норм грузит потом  останавливается на секунд 15-20 и снова  на 5 секунд норм грузит , в чем может быть проблемка?((
Еще проблемка на селекте и импуте не остановливается  setInterval(). вот код

       jQuery(document).ready ( function($) {
          var interval = setInterval(function() {$('#divClass').load("/php/new_user1.php");}, 1000);

          $(window).on('blur', function(){
               clearInterval(interval)
           });
          $(window).on('focus', function(){
                interval = setInterval(function() {$('#divClass').load("/php/new_user1.php");}, 1000)
           });

           $('#mySelect').on('focus', function() {
               clearInterval(interval)
           })
     });   

тут #mySelect мой, при наведении мыши на него setInterval не должен работать
« Последнее редактирование: 15.02.2016, 23:52:26 от hamo » Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1434


« Ответ #25 : 15.02.2016, 23:57:39 »

Не знаю. Попробуйте что-нибудь вроде

Код:
$(window).on('blur', function(){
   clearInterval(interval)
});

$(document).on('blur', function(){
   clearInterval(interval)
});

$(document.documentElement).on('blur', function(){
   clearInterval(interval)
});

$(document.body).on('blur', function(){
   clearInterval(interval)
});

Надо выбрать то, что работает. Ещё вариант не останавливать интервал, а каждый раз проверять, в фокусе ли окно.
« Последнее редактирование: 16.02.2016, 00:40:28 от Филипп Сорокин » Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #26 : 16.02.2016, 00:03:42 »

шас попробую, а про селект что скаже, не останавливается  селект и в гоогле
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1434


« Ответ #27 : 16.02.2016, 00:10:55 »

События blur, focus для инпутов должны срабатывать всегда независимо от браузеров. По поводу селекта,  попробуйте события mouseover, mouseout.
Записан
hamo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 39


« Ответ #28 : 16.02.2016, 23:44:49 »

Филип Сарокин вот написал так  вроде  работает ....

var interval=setTimeout(function(){
         $('#divClass2').load("/php/new_user2.php");
   }, 3000);
$('select').hover(function(){
   clearTimeout(interval);
});
$('select').mouseout( function(){
    interval = setTimeout(function(){
         $('#divClass2').load("/php/new_user2.php");
   }, 3000);
});

Она остановится если перейду на другую страницу ? И если закрою браузер она остановится?
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1434


« Ответ #29 : 16.02.2016, 23:55:06 »

hamo

Никто не понимает конечную цель, которую вы пытаетесь достичь. Вне контекста общей задачи любые советы будут гипотетическими. На данный момент я вижу, что методы просто безумные!
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet