Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2015, 20:31   #1
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию Php и WebSockets

Здравствуйте.

Есть задача, к которой я не знаю как подступиться. Вкратце, суть такая:
- есть некий сервис, который умеет собирать данные из разных источников.
- этот сервис общается с клиентскими приложениями по TCP.
- данные поступают неравномерно - т.е., в произвольный момент времени этот сервис как бы сообщает всем подключенным клиентам - "О! Данные!"

Задача - визуализировать эти данные в браузере.

Проблема - каким образом обеспечить получение исходных данных.

Вариант решения - в php-скрипте открыть сокет и подключиться к этому сервису. Но проблема в том, как долго может работать скрипт, пока не отвалится по таймауту; можно ли сделать так, что бы не отваливаля; если да, то как отправлять получаемые данные (естественно обработанные и подготовленные) в браузер - в web socket?

Прошу помощи, т.к. гугление не дает общей картины.

Идеально будет, если есть примеры с решениями подобной задачи.

Заранее спасибо.
Greek9000 вне форума Ответить с цитированием
Старый 30.03.2015, 20:45   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

таймер вешаем и делаем Ajax запросы - в скрипте если есть данные даем флаг - есть не.... если есть данные - то показываем их или че там еще
ADSoft вне форума Ответить с цитированием
Старый 30.03.2015, 20:48   #3
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

неотваливающегося не сделать, надо просто переподключаться
вощем я не понял в чем у вас проблемма
lomastr_ вне форума Ответить с цитированием
Старый 30.03.2015, 21:41   #4
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
неотваливающегося не сделать, надо просто переподключаться
вощем я не понял в чем у вас проблемма
Вообще lomastr прав, только переподключаться. но можно написать модуль на c или c++ который будет слушать сокет и в случаи получения данных кидать их клиенту.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 31.03.2015, 19:38   #5
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
неотваливающегося не сделать, надо просто переподключаться
вощем я не понял в чем у вас проблемма
С этим не согласен.
set_time_limit(0) - обеспечивает бесконечное выполнение скрипта, а ob_implicit_flush() заставляет php выводить результат сражу, не дожидаясь полной загрузки страницы.

Но для решения моей проблемы этого не достаточно.
Допустим, я открыл в браузере страницу с кнопкой "Старт" и полем для отображения данных (textarea). Вопрос в том, какой javascript надо привязать на клик по кнопке, что бы в textarea начали отображаться данные из "бесконечного" php-скрипта. Ведь по прямой ссылке я его открыть не смогу, аяксом загрузить тоже не получится - потому что события завершения не будет. Тупик...
Greek9000 вне форума Ответить с цитированием
Старый 31.03.2015, 20:11   #6
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
С этим не согласен.
set_time_limit(0) - обеспечивает бесконечное выполнение скрипта, а ob_implicit_flush() заставляет php выводить результат сражу, не дожидаясь полной загрузки страницы.
Да все он прав. вы сейчас пытаетесь стрелять пушкой по воробьям. но не тот вы инструмент тогда берете, хотите бесконечно есть питон, есть nodejs, и т.д каждая задача должна решаться на своем инструменте.

вот тут я писал подобное уже http://programmersforum.ru/showthread.php?t=275312
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 31.03.2015 в 20:14.
Stanislav вне форума Ответить с цитированием
Старый 31.03.2015, 23:06   #7
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

а что интересует как организовать websokets? в инете этого дела полно, копипаста в 3 минуты
или еще в что?
lomastr_ вне форума Ответить с цитированием
Старый 31.03.2015, 23:52   #8
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
а что интересует как организовать websokets? в инете этого дела полно, копипаста в 3 минуты
или еще в что?
тут вот в чем дело..

Цитата:
Допустим, я открыл в браузере страницу с кнопкой "Старт" и полем для отображения данных (textarea). Вопрос в том, какой javascript надо привязать на клик по кнопке, что бы в textarea начали отображаться данные из "бесконечного" php-скрипта. Ведь по прямой ссылке я его открыть не смогу, аяксом загрузить тоже не получится - потому что события завершения не будет.
здесь принцип действует посылка сообщений по инициативе сервера, а не так чтобы вы кнопку нажали и получили ответ. у вас есть некий процесс который что то делает получает информацию, как только он ее получает он должен "пушнуть" ее в сокет, давайте говорить про веб сокет так как нам нужно увидеть это в броузере, сразу же в реайл-тайме.

что можно заюзать чтобы решить эту задачу я уже писал постом ниже и даже ссылку давал http://programmersforum.ru/showthread.php?t=275312
но видимо вас это не заинтересовало

Я описывал и другие варианты.

Открываете страницу. Вешается на яваскрипте таймер который каждые 5 сек опрашивает (по средством ajax запроса) ваш скрипт на php а скрипт уже делает запросы к база или куда вам нужно и если пришли данные php их возвращает, в ответе в ajax запросе в методе success вы эти данные пишите в нужный вам div.

Но тогда вам нужно следующее:

Цитата:
- этот сервис общается с клиентскими приложениями по TCP.
этот сервис дергает ваш скрипт, который в свое очередь кладет данные в базу. а на клиенте вы так же дергаете скрипт с каким то параметром (который будет говорить что мы хотим получить данные из базы) если данные есть он их вернет аяхкс запросу.

но! я так же писал где то ранее не помню, если вы напишите какой нибудь модуль на том же с или с++ который будет общаться не прерывно или прерывно (я не знаю что за сервис и вообще архитектуру) с вашим сервисом по TCP и при получении данных он также может их складывать в базу а может сразу слать на веб-сокет. но если вам нужна история, то естественно нужно складывать в базу, а можно сразу отображать (сразу слать веб сокету) и тут же писать в базу (для истории) если выбирать вариант когда сразу пишет в веб-сокет - то не нужен ни какой ява-скрипт который аяксом опрашивает php скрипт, а нужен ява-скрипт который будет слушать сокет, понимаете?

Какой вариант выбрать решать вам, зависит от ваших знаний и желаний и задач самое главное.

Путей по которой можно решить задачу много.


lomastr_ - сможете помочь автору? примерами?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 01.04.2015 в 00:21.
Stanislav вне форума Ответить с цитированием
Старый 16.04.2015, 16:42   #9
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Итак, вот какая картина сложилась на данный момент - может кому-то и пригодится)

1. На веб-сервере скрипт (назовем его demon.php) должен запускаться в виде службы или демона.
2. Внутри скрипта demon.php я должен открыть TCP-подключение с целевому серверу и в бесконечном цикле читать оттуда данные. При получении данных от целевого сервера я формирую сообщение в виде json-обекта и отправляю его клиенту в браузер
3. Если из браузера приходят данные, то в demon.php я должен открыть ещё одно TCP-подключение и в него отправить запрос, сформированный на основе полученных данных.

Базовый пример, который помог мне собрать всё в кучу тут:
http://www.sanwebe.com/2013/05/chat-...ket-php-socket

Всем спасибо за участие.
Greek9000 вне форума Ответить с цитированием
Старый 16.04.2015, 17:01   #10
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Да не за что, надеюсь никто так делать не будет. Грабли сплошные молчу про то что работать будет только на броузерах держащие вебсокет и только не за натом. + доп нагрузка на сервер. Вы шикарно стрелнули из пушки по воробьям.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
статья - Бесплатный PHP, HTML, CSS, JavaScript редактор ? Codelobster PHP Edition Pblog Обсуждение статей 0 20.04.2012 14:50
TopServer(PHP+MySQL+Apache+/etc), и обновление компонентов(в основном PHP) Пепел Феникса Софт 2 05.11.2011 14:38
Вебинар по PHP - для тех, кто хочет начать изучение PHP, 30 июля. PHPLance HTML и CSS 0 23.07.2011 22:33
что не так с php кдом или с настройками MySQL+PHP Jimmi Помощь студентам 2 27.12.2010 09:03
Преобразование HTML-PHP в PHP с запуском в командной строке. TERAB1T PHP 4 01.06.2010 14:14