настройка веб-сокетов без командной строки

Как я могу следовать такому руководству без использования командной строки?

http://www.flynsarmy.com/2012/02/php-websocket-chat-application-2-0/

Мне нужно иметь возможность использовать веб-сокеты, но иметь общий сервер и не иметь доступа к командной строке.

Я не могу просто запустить скрипт из браузера, если скрипт перестанет работать, когда я закрою браузер/отключусь от Интернета.


person maxhud    schedule 15.02.2013    source источник


Ответы (3)


Предполагая, что ваш хостинг-провайдер поддерживает задания crontab и cron (большинство из них поддерживают), добавьте следующее задание в crontab:

@reboot nohup php /path/to/server.php 2>&1 >/dev/null &

Кроме того, вам нужно запустить его сейчас, поэтому просто создайте следующий файл PHP и откройте его один раз в своем браузере:

<?php shell_exec('nohup php /path/to/server.php 2>&1 > /dev/null &');?>

Это должно делать свое дело. Надеюсь, ваш хостинг-провайдер позволяет выполнять вызовы execve(). Удачи!

person Octav O    schedule 22.02.2013
comment
будет ли это по существу держать скрипт всегда открытым/принимающим соединения? Я могу запускать задания cron и запускать этот скрипт, но на самом деле он нигде на странице не говорит «crontab». я предполагаю, что это просто подразумевает, что это «crontab» и что он должен работать? .. Я могу запускать команды shell_exec. Вы имеете в виду, надеюсь, они разрешат эту команду? - person maxhud; 23.02.2013
comment
Если вы используете nohup для запуска файла server.php, он всегда будет держать скрипт открытым и принимать подключения. По сути, shell_exec() PHP-код, опубликованный ранее, запустит ваш сервер сокетов. Задание cron было просто для того, чтобы запустить файл server.php, если ваш сервер общего хостинга перезагрузится. - person Octav O; 23.02.2013
comment
Спасибо за ваше время и решение - person maxhud; 23.02.2013
comment
разрешит ли сервер веб-сокет в определенном порту (например, 6800) - person Pradeep; 27.04.2014
comment
@OctavO, как мы можем это остановить? - person Saleh Mosleh; 07.01.2018
comment
502 — веб-сервер получил неверный ответ, выступая в качестве шлюза или прокси-сервера. вот какую ошибку я получаю. - person Shashank Mishra; 24.06.2018
comment
нужно то же самое для винды, пожалуйста - person alamnaryab; 26.02.2020
comment
Я использую codeigniter, мои модули веб-сокета работают, пока я запускаю команду на cmd в Windows, я пытаюсь автоматизировать процесс выполнения этой команды, кто-нибудь, пожалуйста, помогите мне, как это сделать? - person Eibs; 15.09.2020

Что ж, попробуйте запустить Server.php в браузере. Большую часть времени php-cli-скрипт также отлично работает в браузере (до использования некоторых функций командной строки, таких как argv/argc и т. д.). На другой вкладке браузера в другом браузере вы можете запустить обычный URL-адрес, такой как снимок экрана в данном руководстве.

Одна важная вещь: проверьте, включены ли сокет и другие необходимые расширения на вашем общем сервере.

person kuldeep.kamboj    schedule 15.02.2013
comment
это, по сути, запустит мой php-скрипт и продолжит его работу на сервере?... похоже, это то, что должно произойти - person maxhud; 22.02.2013
comment
Он запустит ваш серверный скрипт и будет продолжать работать до тех пор, пока вкладка/окно браузера не будет закрыто (но только в том случае, если идентификатор кода сервера не зависит от некоторых функций php cli-only.). - person kuldeep.kamboj; 22.02.2013
comment
Без запуска скрипта на сервере вы просто не сможете этого сделать... Даже если у вас на самом деле нет доступа к серверу, вы можете «вломиться» в него с помощью php system() и этого способ инициализировать сервер там. Или просто пойти и получить подходящий хост для этой цели, я предлагаю. - person Smar; 22.02.2013
comment
Или на самом деле, если подумать, если system() (или exec() или что-то подобное) доступна, вы можете запустить «php script.php &», чтобы сделать это запустите в фоновом режиме, затем просто закройте браузер, и он может остаться в живых... - person Smar; 22.02.2013

Я не знал о директиве CRON @reboot до сих пор, поэтому решение @Octav O, вероятно, намного лучше. Но во время тестирования я обнаружил следующий код (найденный на Руководство по веб-сокетам от Saran) весьма полезно.

Сохраните это как websocket_launch.sh в том же каталоге, что и server.php...

PID=`ps -aef | grep "server.php" | grep -v grep | awk '{print $2}'`
if [ -z $PID ]
then
    #echo "Launching now"
    nohup php server.php > error_log &
else
    #echo "Running as PID $PID"
fi

... затем каждую минуту запускайте сценарий оболочки с помощью CRON. Скрипт проверяет, запущен ли server.php, и если нет, то запускает его.

person neokio    schedule 22.05.2014