Potrzebuję nawiązać stałe połączenie z serwerem, niestety wszelkie moje próby spełzły na niczym.
Robię konsolę, która umożliwi mi wysłanie i otrzymywanie danych z serwera. Idea działania jest taka:
Kod
connect 192.163.0.153 500 <-- połączenie z serwerem o ip 92.163.0.153 - port 500
-- connection set
send 123456 <-- wysłanie danych do serwera 123456
-- 654321 <-- odpowiedź serwera
-- connection set
send 123456 <-- wysłanie danych do serwera 123456
-- 654321 <-- odpowiedź serwera
Wszystkie ip, porty czy dane na forum są fikcyjne.
Problem polega na tym, że każde polecenie( connect, send) to nowe zapytanie do serwera(PHP) przez AJAX. Gdy mój kod PHP wygląda mniej więcej tak:
<?php $name = $_POST['name']; // $name to nazwa funkcji <-> connect, send $data = $_POST['data']; //$data to parametry np. dla connect w powyższym przykładzie będzie to ciąg: '192.163.0.153,500' require_once('./klasa.php'); switch( $name ){ case 'connect': $connection = klasa::connect( $data[0],$data[1] ); if( $connection ){ $_SESSION['connection'] = $connection; //!!! } else break; case 'send': $fp = $_SESSION['connection']; //!!! //różnego rodzaju operacje break; default: break; } } ?>
Plik klasa.php jest bardzo prosty:
<?php class klasa{ $connection = stream_socket_client( 'tcp://'.$id.':'.$port,$errno,$errstr ); if( $connection ) return $connection; else return false; } } ?>
Jak widać łączę się z serwerem za pomocą stream_socket_client i próbuję utworzone połączenie zapisać w sesji "$_SESSION['connection'] = $connection;". Następnie w kolejnym zapytaniu( AJAX, konsola -> funkcja send) próbuję "odzyskać" to połączenie poprzez "$fp = $_SESSION['connection'];"
Jednak wtedy uzyskuje błąd, że pierwszy parametr w funkcjach fgets i fread jest nieprawidłowy - jak pisałem przyjmuje wartość (int)0.
Próbowałem chyba wszystkiego stream_socket_client, stream_socket_server, fsockopen, pfsockopen, jednak nie udało mi się osiągnąć zamierzonego efektu.
Jak mimo zakończenia działania skryptu PHP utworzyć stałe połączenie z serwerem, które będzie przechowywane w sesji?
Pozdrawiam i z góry dziękuje z odpowiedzi.
PS. Jestem pewien, że sama funkcja send działa prawidłowo.