Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Веб сервис |
Автор: Rodman 11.6.2010, 22:28 |
Дароф интересует вопрос - "Как написать веб сервис, который бы слушал конкретный порт и получал пакеты для обработки?" Сейчас пока выкручиваюсь так что запускаю PHP.EXE + скрипт для обработки входящего пакета. но это временное решение и интересует как мне это сделать программно? Сенкс |
Автор: Vasay 11.6.2010, 22:53 | ||
Rodman, Поставить апач (или другой web сервер), настроить его на нужный порт. Реализовать бизнес логику средствами PHP (коли раздел по PHP). А в чем, собственно проблема?
??? Не представляю техническую реализацию подобного. (Ну, впринципе, можно конечно - но не нужно) |
Автор: gcc 11.6.2010, 22:58 |
Socket? |
Автор: Vasay 11.6.2010, 23:00 | ||
Не понял.... так кто инициирует соединение? Т.е. Вам нужно сделать web-сервис? Или клиент для чужого web-сервиса? |
Автор: Fortop 12.6.2010, 15:05 | ||
SOAP/RPC нет? |
Автор: Rodman 13.6.2010, 20:23 |
сори... перефразирую... не правильно начал понятие продвигать.... итак 1. Необходим серверный агент (демон), который будет постоянно работать на сервере и слушать нужный порт. 2. Скрипт работы его уже есть 3. Вопрос - как запустить этого агента (демона) на хостинге в интернете? 4. Будет ли сервак хостига - его рубить? следовательно - что делать в этом случае? агент должен работать постоянно. |
Автор: Vasay 13.6.2010, 21:15 | ||
Rodman,
А чем не устраивает Apache web сервер который есть на любом хостинге, разве что порт могут не дать поменять? Вы пытаетесь изобрести велосипед. Читайте про Web-сервисы. По сути все так же как и в случае с WEB сайтом, только вместо HTML вы должны отдать XML. http://www.google.com/#hl=en&source=hp&q=web+%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81+%D0%BD%D0%B0+php&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=8e221186758f4b31. Особо не вчитывался, но на первый взгляд на хабре неплохо написано http://habrahabr.ru/blogs/php/46374/ Ну если уж так хочется изобрести велосипед, и написать свой сервер, то выбирать нужно из языков поддерживающих многопоточность. Только писать свой web-сервер Вам не нужно. |
Автор: Rodman 13.6.2010, 22:28 | ||
так вот про велосипеды. апач веб сервер слушающий порты 80 (8080)... но есть мой агент который должен может параллельно. а мож быть интергирован в апач но постоянно работать и получать пакеты...
тут вот тока запускается, но мне надо чтобы он работал без перерыва! т.е. 1. как проверить и поднять? 2. что и где прописать (поднят или нет)? 3. сколько позволено работать в бесконечном цикле? |
Автор: Vasay 13.6.2010, 22:40 | ||||
Rodman,
Апач может слушать любой порт.
Во первых поправьте ссылку на хабру (4-ку потеряли) Во вторых - прочитайте статью, а не пролистайте. Grabber.php в данном примере к веб-сервису отношения имеет весьма косвенное - этот скрипт лишь раз в сутки выдирает курсы валют с со страниц сайта НБУ (Национального Банка Украины). |
Автор: HmeL 18.6.2010, 14:47 |
ЗАБУДЬТЕ ПРО ВЕБ-СЕРВИС С самомго начала: 1. Есть сайт на удаленном хостинге. 2. Есть другой сайт, к которому можно подконнектиться с помощью fsockopen, послать определенный пакет - тогда в ответ начнут сыпаться пакеты. если ничего не слать - в ответ ничего сыпаться не будет. 3. Есть скрипт (php), который осуществляет коннект к другому сайту и обработку этих ответных пакетов. Скрипт запускался вручную на локальной машине (php.exe <имя_скрипта>) ВНИМАНИЕ, ВОПРОС! Как на удаленном хостинге стартовать этот скрипт? Как автоматически запустить его снова, если он вдруг выключится по неперехватываемому exception? Как долго разрешено такому скрипту находится в рабочем состоянии? |
Автор: skyboy 18.6.2010, 15:08 |
HmeL, ты - Rodman? или просто влом новую тему создать? |
Автор: HmeL 18.6.2010, 15:18 |
Я, это я. Родман - мой коллега, который сидит в соседнем кабинете. Бьемся над одной проблемой. Гугл мне не в помощь - потому что не уверен в правильности терминологии. Поэтому и обращаюсь к вам за помощью |
Автор: Vasay 18.6.2010, 15:30 |
HmeL, Что-то мне кажется, что вы сильно мудрите. С какой периодичностью вам надо забирать данные? Может не надо ничего держать постоянно запущенным и достаточно использовать CRON ? На обычном хостинге вам никто не даст иметь своего демона. Нужен, как минимум, какой-нибудь "продвинутый" хостинг или vps. |
Автор: Fortop 18.6.2010, 15:32 |
HmeL, Показываю на пальцах. Есть сайт на нем размещаем скрипт SOAP-сервер (можно делать и на сокетах). Есть другой сайт где стоит скрипт SOAP-клиент (можно делать и на сокетах) Делаем раз В браузере site1.com/client.php?start=&get=content Делаем два В командной строке wget site1.com/client.php?start=&get=content Делаем три На удаленном хостинге ssh user@serverip php /path/to/script/client.php start get=content О том как поднимать скрипт автоматически - гуглим "демоны на php" |
Автор: HmeL 18.6.2010, 15:54 | ||||
Данные могут поступить в любой момент, и получать их необходимо как можно быстрее. Демон реализован так, что он установил соединение по сокету и слушает порт. как только по порту посыпались данные - он их заносит в БД. Проблема в том, что пока не пошлешь другому сайту определенный пакет (регистрация приемника), сайт не начнет сыпать пакеты в ответ. Поэтому автозапуск скрипта по событию, когда на порт что-то пришло - отпадает. CRON, хм... сейчас погуглю
а эту строку где прописывать надо? в httpd.conf ? Погуглю |
Автор: Fortop 18.6.2010, 16:04 | ||||
Эм? Вы же запускать что-то собирались на удаленном хостинге? Это команда для linux набираете ее в консоли на локальной машине. Под Win проще воспользоваться putty Хотя было бы еще проще, если бы вы немного пояснили задачу. Возможно, половина танцев с бубном просто не нужна. |
Автор: HmeL 18.6.2010, 16:14 | ||
в предыдущем посте задачу прояснил - конкретнее некуда.
стартанул я его, отлично. а что делать когда он упал? просыпаться в 3 ночи и прописывать в командной строке снова? Vasay, За КРОН - большое человеческое, буду ковырять |
Автор: Vasay 18.6.2010, 16:31 |
HmeL, Из всего вышенаписанного я понял, что у вас где-то есть сервер, который принимает входящие соединения, и сыпет в них какие-то данные. При этом соединение может оставаться открытым часами? Правильно? И Вам нужно написать клиента к этому серверу? |
Автор: HmeL 18.6.2010, 17:15 |
Vasay, Понял правильно, только этот сервер по своему таймауту шлет запрос на разрыв соединения. в этом случае агент засыпает на минуту и создает новое соединение. Клиент уже написали. Протестирован на локале, на денвере, тепреь пытаемся запустить эту неведомую #@$ню на хостинге ![]() |
Автор: Vasay 18.6.2010, 17:38 | ||
HmeL, Если хостинг дает доступ по ssh (если он не дает, то Вам такой хостинг не подходит) заходите на сервер по ssh (длы виндовс используете программу putty). Я запускаю демонов таким скриптом (т.е. создаю файлик с этим скриптом, ставлю на него права на исполнение):
комманда запуска в вашем случае "php имя_скрипта" Но вот хостинг, скорей всего будет этот скрипт убивать. Так что лучше взять какой-нибудь дешевый VPS |
Автор: HmeL 18.6.2010, 17:47 |
Vasay, хостер поддерживает ssh и cron. я уже поменял код демона, он отрабатывает 100 циклов и шатдаунится. в крон прописал старт каждые 5 минут - так что с этим проблем нет. пока что мучаемся через putty подключится к хостингу с помощью сгенеренного .ppk файла, но безрезультатно. может есть другие методы? напрямую по айпи можно подключится? |
Автор: Fortop 18.6.2010, 18:18 | ||
Абстрактно и ни о чем. Мы пульнем пакеты, нам начнут сыпаться пакеты. Зачем, почему - не понятно. Кто сказал что вообще нужно делать именно так? Обычно, если человек даже не знает с какого конца браться за сформулированную им задачу, то сформулировал он ее неправильно.
Для этого надо стартовать не сам процесс, а мастер-процесс. Который и будет контролировать работу дочерних. Упал дочерний - подняли его. |
Автор: Rodman 21.6.2010, 00:40 |
Fortop, задача - отправить пакет одним агентом. а вторым получить подтверждение доставки. вроде все получилось с отправкой. вот с получением подтверждением пока не справились, но возник вопрос - как проверить количество запущенных агентов кроном и рубануть их при надобности (есть подозрения что запустилось несколько)? |
Автор: Fortop 21.6.2010, 10:56 | ||||||
Вот если бы не выдумывали велосипедов, то и проблем бы не имели. SOAP дает возможность получить подтверждение о приеме данных.
А вы не хотите сделать 1 вопрос - 1 тема? запущенные процессы можно посмотреть при помощи
|
Автор: Rodman 21.6.2010, 12:03 | ||
работа происходит по определенному протоколу. поэтому SOAP отбросили. я не имею доступа к серверу через командную строку. я думал на РНР есть какой нить вариант |
Автор: Fortop 21.6.2010, 17:17 | ||||
Я об этом и писал. Зачем придумывать свой левый протокол, который не поддерживает подтверждения успешности операции? Вот теперь и отгребаете проблемы на ровном месте. PHP тем и удобен что он позволяет легко связывать кучу разных вещей, которых в нем нет. А вариант есть - я писал о нем.
Вопрос множества мастер-процессов решается путем lock.файла |