Razzwan
26.11.2015 - 20:54
Читаю
вот эту статью на хабре.
Простейшая работа с сокетом в этой статье выглядит так:
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
die("$errstr ($errno)\n");
}
while ($connect = stream_socket_accept($socket, -1)) {
fwrite($connect, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\n\r\nПривет");
fclose($connect);
}
fclose($socket);
Т.е. это исполняемый файл, который я запускаю через консоль. Хорошо, на локальном сервере я запустил этот файл - он работает, порт прослушивается, ответы отсылаются, но только пока открыта консоль, в которой запущена эта команда.
Вопросы:
1. Как запустить выполнение этого файла на удаленном сервере?
2. Вообще это нормально, если этот файл будет вечно работать, или нужно его запускать, как реакцию на какой-то запрос?
Вот пишу все это, а у самого такое чувство, что я просто не понимаю, каких-то более базовых принципов работы сервера на веб-сокетах. И непонимание настолько глубоко, что я даже не понимаю, чего именно я не понимаю. Главное, с принципами работы веб-сокетов вроде все просто и понятно, но сервер при этом должен работать каким-то волшебным, непонятным мне образом. Помогите понять, что нужно понять?
И еще, в сети нашел, что браузеры Firefox и Opera одно время не поддерживали работу с веб-сокетами (с 2011 года, вроде), в связи с безопасностью. Как решили эту проблему, где об этом почитать?
_____________
Youtube канал WebDeveloper->Run()Сайт для душиGitter
Цитата (Razzwan @ 26.11.2015 - 20:54) |
Вопросы: 1. Как запустить выполнение этого файла на удаленном сервере? 2. Вообще это нормально, если этот файл будет вечно работать, или нужно его запускать, как реакцию на какой-то запрос? |
1. Точно так же, как и на локальном. Google -> "запуск команд в фоновом режиме linux".
2. Нормально. Это же демон. В статье на хабре этот кусок кода озаглавлен как "Пример простого http сервера, который на все запросы отвечает: Привет". То есть это "аналог" Apache или Nginx. Соответственно и висеть в памяти он должен постоянно.
Razzwan
26.11.2015 - 21:44
Спасибо за ответ. Почему без регистрации?
_____________
Youtube канал WebDeveloper->Run()Сайт для душиGitter
Razzwan
29.11.2015 - 03:31
Вроде на словах все просто.
На днях общался с одним разработчиком (о квалификации представления не имею), так вот он с пеной изо рта доказывал, что web-сокеты + php вообще нет смысла использовать, когда в природе существует Node.js. Аргументировал это тем, что php очень нестабилен и ложится часто при даже низком количестве подключений. Насколько такая позиция оправдана, - фиг поймешь. В сети встречаются мысли, что php для этого не подходит и встречаются опровержения. Кому верить?
_____________
Youtube канал WebDeveloper->Run()Сайт для душиGitter
inpost
29.11.2015 - 06:36
RazzwanТолько себе. Взял, сделал и тестируй в своё удовольствие.
А в целом, если кто-то что-то доказывает с пеной у рта - это ещё не повод ему верить, порой он просто слишком самовлюблённый
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
icedfox
29.11.2015 - 11:22
Цитата (inpost @ 29.11.2015 - 08:36) |
порой он просто слишком самовлюблённый |
нее , просто пены во рту много
Возможно nodejs и приятней php для websocket'ов, но проблемы которые порождает его использования довольно хорошо играют против него:
1. Фрагментация решений, то есть у тебя все написано на php, и тут затисался сервис на nodejs, нужно будет довольно много времени другому человеку что бы он разобрался на хорошем уровне, что нужно подправить в коде, если до этого он не работал с NodeJS;
2. NodeJS ассинхроный, надо учиться мыслить асинхронно, после пхп это не так быстро получается, в результате чего происходит либо завал по срокам, либо отметание многопоточности, и написание программ в NodeJS без использования всех плюсов многопоточности, что в итоге не дает ни каких плюсов перед PHP.
3. Аргумент о нестабильности PHP как демона недоказан.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
T1grOK
30.11.2015 - 14:08
Цитата (chee @ 29.11.2015 - 13:12) |
1. Фрагментация решений, то есть у тебя все написано на php, и тут затисался сервис на nodejs, нужно будет довольно много времени другому человеку что бы он разобрался на хорошем уровне, что нужно подправить в коде, если до этого он не работал с NodeJS; |
Как правило скрипт слушающий сокет, должен просто проксировать данные, поэтому NodeJS знать нет необходимости.
Постоянно работаю с сокетами, слушающий скрипт на PHP, работает неделями, без каких-либо утечек памяти, падения производительности и т.д.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
30.11.2015 - 14:12
Под PHP есть замечательная библиотека для работы с сокетами - ratchet, которая является оберткой над reactphp.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Цитата (T1grOK @ 30.11.2015 - 14:12) |
Под PHP есть замечательная библиотека для работы с сокетами - ratchet, которая является оберткой над reactphp. |
+1, поднимал серсис эмулирущий другой сервис на этой библиотеке. Уже давал на неё ссылку в темах ТС. Основной минус, нужно читать код что-бы понять как выбирать данные из-запроса, так как документации вразуминительной не очень.
Цитата (T1grOK @ 30.11.2015 - 14:08) |
Как правило скрипт слушающий сокет, должен просто проксировать данные, поэтому NodeJS знать нет необходимости. |
То есть NodeJS получает запросы и пуляеи их в php?
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
T1grOK
30.11.2015 - 14:56
Цитата (chee @ 30.11.2015 - 10:35) |
То есть NodeJS получает запросы и пуляеи их в php? |
Именно, обращается к какому-нибудь API например, или вообще кладет в очередь...
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
icedfox
30.11.2015 - 15:05
Цитата (T1grOK @ 30.11.2015 - 16:56) |
Именно, обращается к какому-нибудь API например, или вообще кладет в очередь... |
Итого.
1. имеем отдельный сервер с NodeJS
2. имеем некий PHP обрабатывающий запросы от NodeJS
3. И в случае большого количества запросов NodeJS просто завалит этот PHP
Так спрашивается, зачем городить городушки , а не использовать PHP демона вместо этой связки ?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.