Сокет сервер, запуск сокет сервера на хостинге.

Gessel

Новичок
Сокет сервер, запуск сокет сервера на хостинге.

Мне нужен сокет сервер который будет всегда слушать клиентов. А как к нему подключается клиент. то он эту запись записывает в базу. Я написал скрипт. Он все замечательно слушает. Но есть проблема. Он замечательно работает когда я его из браузера, но мне нужно запустить на сервере (На хостинге) В тех поддержке мне сказали что надо попробовать чере кронтаб. Я сделал так: Поставил запускать сервер через каждый час. Я запускаю клиента, и проверяю записи в базе. Они появляются. Но через определенный промежуток времени я запускаю клиента, и записи не появляются.
Мне нужно чтобы сервер всегда работал принимал клиента и записывал в базу.
Как можно это реализовать?
 

DiMA

php.spb.ru
Команда форума
Забавный стиль текста... как будто записки из палаты №6.

1. запускай по крону каждую минуту
2. скрипт не должен запуститься, если уже работает предыдущая копия
3. скрипт логирует все в файл (+ошибки), на основе его и лога пхп-ошибок разбираешься
 

Gessel

Новичок
Да вот со стилем не спорю, просто я уже с этим стока мучаюсь вот и не знал с чего начать.
Я ставил запускать крон через каждые 15 минут и сервер через пол дня падает. Его надо перезапускать. Это не дело.
 

DiMA

php.spb.ru
Команда форума
Не нужно сюда сливать рассказ о профуканном времени .-) Выполни указанные 3 пункта. О конкретных проблемах при их реализации - спрашивай.
 

Gessel

Новичок
Я это написал к тому что если я запускал его через 15 минут и виртуальный сервер падал через пол дня, то что будет если я его запускать буду через минут?
А как проверять запущена ли предыдущая копия?
 

dimagolov

Новичок
А как проверять запущена ли предыдущая копия?
обычно pid процесса пишется в файл, перед этим проверяется не ту ли живого процесса с прочитанным из файла pid-ом.
 

DiMA

php.spb.ru
Команда форума
Еще можно залочить какой-нибудь файл. Если процесс упадет - блокировка снимится сама. Соотв. в начале скрипта пытаешься заблокировать этот файл, в режиме "Вернуть FALSE, если файл залочен", а не "Ожидать, пока снимится блокировка".

Обрати внимание на пункт 3, текст после запятой. Озаботься изучаем логов.

Сам скрипт должен работать иногда себя перезапускать. Очевидно, что ты наговнокодил, в пхп утекают ресурсы (память, дескрипторы или еще чего), из-за чего он работает не вечно, а полдня, потом падает. Поэтому спустя час-два пусть скрипт завершается добровольно, предварительно запустив копию себя (либо понадеевшись на минутный крон).
 

Gessel

Новичок
Я сделал условие что если приходит переменная тогда чтоб на почту приходило сообщение. На почту сообщение приходит, а запись в базу не записывается. Значит сервер работает. А может быть что врем подключения к базе истекло?

Кусок кода
<?
while(TRUE)
{

// Считываем заданное количество байт из указанного сокета
if(FALSE === ($line = @socket_read($accept, 2048)))
{
print("Невозможно прослушать сокет: " .
socket_strerror(socket_last_error()) . "<br>");
ob_flush();
break 1;
}
// Запись в базу
// fwrite($fp, $line."\n");

if ($line)
{
mail("[email protected]","Prinyati dannie",$line);

$db = mysql_connect ('xx.xxx.xxx.116','login','pass');
$mysql= mysql_select_db ('u192070',$db);
mysql_query("SET NAMES 'cp1251';");

$query = "Insert into crd_data ('line') values ($line);
$result = mysql_query($query,$db);

}
?>
 

Alexandre

PHPПенсионер
Мне нужен сокет сервер который будет всегда слушать клиентов.
зачем, наверняка есть:
- уже готовые решения
- решения, которые решаются другим образом

такой сервер, который падает каждый раз при запуске - это кривое решение...
 

Gessel

Новичок
Я злял его с готовых решений, просто его нужно запустить чтоб он всегда вертелся.
 
Сверху