@AlexSer

Как настроить PHP socket server?

Я много не понимаю.
Взял простой сервер который на сайте php.
$socket = stream_socket_server("tcp://localhost:15689", $errno, $errstr);
stream_set_blocking($socket,0);
stream_set_timeout($socket,0);
set_time_limit(0);
if (!$socket) {
    echo "$errstr ($errno)<br />\n";
} else {
    while ($conn = stream_socket_accept($socket)) {
                $data=fread($conn,1024);
                $save=new Db($data);
        fclose($conn);
    }
    fclose($socket);
}



class Db{
    public $host;
    public $root;
    public $password;
    public $database;
    public $data;

    public function __construct($data)
    {
        $this->data=$data;
        $this->host='localhost';
        $this->root='root';
        $this->password='12345';
        $this->database = 'db';
        $this->connect();

    }

    public  function  connect(){
       $link=mysqli_connect($this->host, $this->root, $this->password, $this->database)
        or die("Ошибка " . mysqli_error($link));
        $this->insert($link);
    }

    public  function  insert($link){
        $sql = mysqli_query($link,"INSERT INTO `time_load` (`text`) VALUES ('$this->data')");
        $this->closeConnection($link);
    }
    public  function closeConnection($link){
        mysqli_close($link);
    }
}

У меня прямо из com порта идет пересылка данных на TCP порт
нужно чтобы определял подключение и пока идет поток данных держал это подключение, собирал данные и потом уже вставлял все полученные данные в поле text.
А происходит, что он каждый поток данных видит как новое подключение(я так думаю), и поэтому у меня в бд появляется 100 записей вместо 1.
В идеале нужно:
Есть компьютер, на нем установлен ретранслятор данных из com->tcp(virtual Serial POrts Emulator), когда необходимо начать принять данные из com порта, пользователь заходит в браузер и производит подключение клиента(так как IP один на два клиента), необходимо чтобы сервер показывал данные из эмулятора клиенту:,
Сейчас в Бд не очень хорошо все выглядит , на одну передачу данных 100 записей.
Написано 3 минуты назад
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
@galliard
$data = '';

if (!$socket) {
    echo "$errstr ($errno)<br />\n";
} else {
    while ($conn = stream_socket_accept($socket)) {
                $data .= fread($conn, 1024);
                fclose($conn);
    }
    fclose($socket);
}

$save=new Db($data);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы