【问题标题】:Continuous data handling through TCP通过 TCP 连续处理数据
【发布时间】:2010-11-29 21:09:32
【问题描述】:

我需要通过 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";
    }

?>

问题

  1. 如何启动和停止此服务器?

  2. 如何让它不间断地工作(小时/天/周),因为现在它会在某个时间点停止执行。

  3. 如果10/20/100/1000 跟踪器连接并开始向192.168.0.179:2323(服务器)发送数据会怎样?

【问题讨论】:

  • 听起来你应该阅读一下客户端/服务器的安排。
  • 我阅读了一些关于客户端/服务器安排的信息,但我仍然有很多问题。

标签: php mysql tcp gps


【解决方案1】:
  1. 您需要使用 PHP 命令行工具运行程序,即/usr/bin/php server.php。要阻止它,请使用 kill(1) 杀死它。
  2. 正如 Shawn Hsiao 所写:程序在从服务器获取终止命令时终止。
  3. 你只提供了客户端的代码,不提供服务器的代码,所以很难分辨。但是,一般来说,让数百个客户端连接到单个服务器并没有什么问题。

【讨论】:

  • 我是不是做错了什么,因为我认为这是一个“服务器”(接收数据并将其写入数据库)而我的 gps 跟踪器是一个“客户端”(将数据发送到 192.168.0.179:2323 )?
  • 在socket编程中,监听传入请求的是服务器(比如web服务器,在80端口);连接的是客户端(例如网络浏览器)。 fsockopen 是一个客户端函数。要使用 PHP 编写服务器,您需要使用 socket_listensocket_accept 之类的函数。如果您的设置完全有效,您的 GPS 跟踪器不会发送数据 2323,而是 2323。
  • 哦,我明白了。它可能正在工作,因为我的 gps 模拟器正在同一个端口工作。非常感谢您的解释!
【解决方案2】:

关于2:

以下代码行

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

似乎导致它在 GPS 获得锁定时从 while 循环中中断。如果是这种情况,您的程序将在 GPS 获得锁定时停止。

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2014-10-11
    • 2018-06-14
    • 2017-09-20
    • 1970-01-01
    • 2018-12-01
    • 2018-01-19
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多