[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: WebSockets на PHP
Razzwan
Читаю вот эту статью на хабре.

Простейшая работа с сокетом в этой статье выглядит так:
#!/usr/bin/env php
<?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
Guest
Цитата (Razzwan @ 26.11.2015 - 20:54)
Вопросы:
1. Как запустить выполнение этого файла на удаленном сервере?
2. Вообще это нормально, если этот файл будет вечно работать, или нужно его запускать, как реакцию на какой-то запрос?

1. Точно так же, как и на локальном. Google -> "запуск команд в фоновом режиме linux".
2. Нормально. Это же демон. В статье на хабре этот кусок кода озаглавлен как "Пример простого http сервера, который на все запросы отвечает: Привет". То есть это "аналог" Apache или Nginx. Соответственно и висеть в памяти он должен постоянно.
Razzwan
Спасибо за ответ. Почему без регистрации?

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Razzwan
Вроде на словах все просто.

На днях общался с одним разработчиком (о квалификации представления не имею), так вот он с пеной изо рта доказывал, что web-сокеты + php вообще нет смысла использовать, когда в природе существует Node.js. Аргументировал это тем, что php очень нестабилен и ложится часто при даже низком количестве подключений. Насколько такая позиция оправдана, - фиг поймешь. В сети встречаются мысли, что php для этого не подходит и встречаются опровержения. Кому верить?

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
inpost
Razzwan
Только себе. Взял, сделал и тестируй в своё удовольствие.
А в целом, если кто-то что-то доказывает с пеной у рта - это ещё не повод ему верить, порой он просто слишком самовлюблённый wink.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
icedfox
Цитата (inpost @ 29.11.2015 - 08:36)
порой он просто слишком самовлюблённый

нее , просто пены во рту много wink.gif
chee
Возможно nodejs и приятней php для websocket'ов, но проблемы которые порождает его использования довольно хорошо играют против него:
1. Фрагментация решений, то есть у тебя все написано на php, и тут затисался сервис на nodejs, нужно будет довольно много времени другому человеку что бы он разобрался на хорошем уровне, что нужно подправить в коде, если до этого он не работал с NodeJS;
2. NodeJS ассинхроный, надо учиться мыслить асинхронно, после пхп это не так быстро получается, в результате чего происходит либо завал по срокам, либо отметание многопоточности, и написание программ в NodeJS без использования всех плюсов многопоточности, что в итоге не дает ни каких плюсов перед PHP.
3. Аргумент о нестабильности PHP как демона недоказан.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
T1grOK
Цитата (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
Под PHP есть замечательная библиотека для работы с сокетами - ratchet, которая является оберткой над reactphp.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
chee
Цитата (T1grOK @ 30.11.2015 - 14:12)
Под PHP есть замечательная библиотека для работы с сокетами - ratchet, которая является оберткой над reactphp.

+1, поднимал серсис эмулирущий другой сервис на этой библиотеке. Уже давал на неё ссылку в темах ТС. Основной минус, нужно читать код что-бы понять как выбирать данные из-запроса, так как документации вразуминительной не очень.

Цитата (T1grOK @ 30.11.2015 - 14:08)
Как правило скрипт слушающий сокет, должен просто проксировать данные, поэтому NodeJS знать нет необходимости.

То есть NodeJS получает запросы и пуляеи их в php?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
T1grOK
Цитата (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
Цитата (T1grOK @ 30.11.2015 - 16:56)
Именно, обращается к какому-нибудь API например, или вообще кладет в очередь...

Итого.
1. имеем отдельный сервер с NodeJS
2. имеем некий PHP обрабатывающий запросы от NodeJS
3. И в случае большого количества запросов NodeJS просто завалит этот PHP

Так спрашивается, зачем городить городушки , а не использовать PHP демона вместо этой связки ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.