2013-02-15 3 views
13

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

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

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

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

ответ

13

Предположим, что ваш виртуальный хостинг провайдер поддерживает 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() звонки. Удачи!

+0

будет ли это по существу поддерживать скрипт всегда открывать/принимать соединения? Я могу запускать задания cron и запускать этот скрипт, но на самом деле он не говорит «crontab» в любом месте страницы. Я предполагаю, что это просто подразумевается, что это «crontab» и что он должен работать? .. Я могу запускать команды shell_exec. вы хотите сказать, что они позволяют эту команду? – maxhud

+0

Если вы используете _nohup_ для запуска файла _server.php_, он всегда будет держать скрипт открытым и принимать соединения.В принципе, ранее написанный код 'shell_exec()' PHP запустит ваш сервер сокетов. Задача cron была просто для запуска файла _server.php_, если ваш хостинг-сервер перезагрузился. –

+0

Благодарим за ваше время и решение – maxhud

1

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

Важное замечание. Убедитесь, что на вашем общем сервере включен или отключен другой разъем.

+0

будет ли это начинать мой php-скрипт и поддерживать его на сервере? ... похоже, что это должно произойти – maxhud

+0

Он запустит ваш серверный скрипт и продолжит работу до закрытия вкладки/окна браузера (но только в случае если код сервера сервера не зависит от некоторых функций php cli-only.). –

+0

Мне нужно решение, которое не требует от меня открытия страницы браузера ... – maxhud

0

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

Сохранить это как 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 каждую минуту. Скрипт проверяет, запущен ли сервер.php, а если нет, запускает его.

Смежные вопросы