Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> WebSockets на PHP, как это должно работать?
Razzwan  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 17 дней
Карма: 10




Читаю вот эту статью на хабре.

Простейшая работа с сокетом в этой статье выглядит так:
#!/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 года, вроде), в связи с безопасностью. Как решили эту проблему, где об этом почитать?


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (Razzwan @ 26.11.2015 - 20:54)
Вопросы:
1. Как запустить выполнение этого файла на удаленном сервере?
2. Вообще это нормально, если этот файл будет вечно работать, или нужно его запускать, как реакцию на какой-то запрос?

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

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 17 дней
Карма: 10




Спасибо за ответ. Почему без регистрации?


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 24 дня
Карма: 15




Цитата
1. Как запустить выполнение этого файла на удаленном сервере?

Можно поставить supervisor и сконфигурировать его, он сам будет при старте системы поднимать все нужные процессы и следить за ними, чтобы всё работало.

Цитата
2. Вообще это нормально, если этот файл будет вечно работать, или нужно его запускать, как реакцию на какой-то запрос?

Нормально. Просто нужно помнить, что демон работает вечно и стараться не допускать утечек памяти. Помнить, что непойманое исключение убьет процесс и его нужно будет запускать заново. supervisor избавит от этой рутины. Ну и если ядерный процессор, то чтобы использовать по максимуму его вычислительные мощности, нужно поднять столько процессов демона сколько у него ядер. Это проще чем звучит, нужен pcntl_fork, да и всё, в родительском процессе получаем количество ядер, создаем дочерние процессы и поднимаем новые, если старые падают и их количество становится меньше, чем требуется, а в дочернем процессе делаем всю основную работу. Вот, вроде из основного всё.
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Razzwan  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 17 дней
Карма: 10




Вроде на словах все просто.

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


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 25 дней
Карма: 599




Razzwan
Только себе. Взял, сделал и тестируй в своё удовольствие.
А в целом, если кто-то что-то доказывает с пеной у рта - это ещё не повод ему верить, порой он просто слишком самовлюблённый wink.gif


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 19 дней
Карма: 13




Цитата (inpost @ 29.11.2015 - 08:36)
порой он просто слишком самовлюблённый

нее , просто пены во рту много wink.gif
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 10 месяцев, 29 дней
Карма: 40




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


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 24 дня
Карма: 15




С чем знаком, на том и нужно писать. Работать будет на чем угодно.

Цитата
и ложится часто при даже низком количестве подключений

Ну в следующий раз спроси его конкретно, из-за чего ложится? Врядли он тебе ответит. Или ответит, что-то вроде "php течет". Но с релизом PHP5 ничего там уже давно не течет. У людей месяцами демоны на php работали и потребление памяти не росло.

Даже если течет. Даже если упереться по лимитам в CPU и RAM. Всё равно ничего не ляжет, будет работать своп, контекст процессора будет и дальше переключаться между процессами, просто начнет всё дико тормозить, но ответы с задержкой все равно будут.

Так что вероятно, что твой знакомый обычный холиварщик smile.gif
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 24 дня
Карма: 15




Цитата
и написание программ в NodeJS без использования всех плюсов многопоточности

Node умеет рожать дочерние процессы. В чем проблема? Да это не потоки и они не делят адресное пространство, но возможно это и к лучшему, не падать в соcтояние гонки. Наладить межпроцессное взаимодействие несложно. В остальном принципиальных отличий потока от дочернего процесса нет.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 15 дней
Карма: 170




Цитата (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
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 15 дней
Карма: 170




Под PHP есть замечательная библиотека для работы с сокетами - ratchet, которая является оберткой над reactphp.


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 10 месяцев, 29 дней
Карма: 40




Цитата (T1grOK @ 30.11.2015 - 14:12)
Под PHP есть замечательная библиотека для работы с сокетами - ratchet, которая является оберткой над reactphp.

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

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

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


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 15 дней
Карма: 170




Цитата (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
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 19 дней
Карма: 13




Цитата (T1grOK @ 30.11.2015 - 16:56)
Именно, обращается к какому-нибудь API например, или вообще кладет в очередь...

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

Так спрашивается, зачем городить городушки , а не использовать PHP демона вместо этой связки ?
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса