Непрерывная обработка данных через TCP - PullRequest
1 голос
/ 20 сентября 2009

Мне нужно обрабатывать непрерывные данные через TCP и записывать их в базу данных. Я использую следующий код (предложенный ZZ Coder ):

<?php

$fp = fsockopen ("192.168.0.179", 2323);

    if (!$fp) {
        die ("$errstr ($errno)");
    }

    if ($fp) {

$user="root";
$password="12345";
$database="db_name";
mysql_connect('localhost',$user,$password);
@mysql_select_db($database) or die( "Unable to select database");

    $point=false;
    $status="";
    $fix=0;
    while (!$point) {
        $string=@fgets($fp, 4096);

    switch (substr($string,0,6)) {
        case "\$GPRMC" :
        list($sentence, $time, $status, $latitude, $NS, $longitude, $EW, $speed, $course, $date, $magvar, $magvarEW)= explode(",", trim($string));
        mysql_query("INSERT INTO gps_data (time, course) VALUES ('$time', '$course')");
        break;

        case "\$GPGGA" :
        list($sentence, $time, $latitude, $NS, $longitude, $EW, $fix, $nbsat, $HDOP, $altitude,,,,,)= explode(",", trim($string));
        break;

        default :
        break;
    }

        if ($status=="A" and $fix == 1){
            $point=true;
        }
    }

    fclose ($fp);
    mysql_close();

    }

    else {
        print "Fatal error\n";
    }

?>

Вопросы * * 1006 Как мне запустить и остановить этот сервер? Как мне заставить его работать без остановки (часы / дни / недели), потому что сейчас он перестает выполняться в какой-то момент. Что произойдет, если трекеры 10/20/100/1000 подключатся и начнут отправлять данные на 192.168.0.179:2323 (сервер)?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2009
  1. Вам необходимо запустить программу с помощью инструмента командной строки PHP, т.е. /usr/bin/php server.php. Чтобы остановить это, убейте его с помощью kill (1).
  2. Как пишет Шон Сяо: программа завершает работу, когда получает команду завершения с сервера.
  3. Вы предоставляете только код клиента, а не сервера, поэтому трудно сказать. Однако в целом нет ничего плохого в том, что сотни клиентов подключаются к одному серверу.
0 голосов
/ 20 сентября 2009

Относительно 2:

следующие строки кода

if ($status=="A" and $fix == 1){
        $point=true;
}

, кажется, заставляет его прерываться из цикла while, когда GPS захватил блокировку. Если это так, ваша программа остановится, когда GPS получит блокировку.

...