Witam serdecznie
Mam urządzenie które ma za zadanie przesłać dane na serwer w formie tekstowej(kilkadziesiąt bajtów jednorazowo).
Dane przekazywane są po TCP
Próbuję to jakoś ogarnąć w PHP ale kombinuję już od jakiegoś czasu i nie bardzo wiem jak się do tematu zabrać.
Do celów testowych uruchomiłem serwer pod node wszystko działa tak jak powinno ale z PHP jakoś nie mogę tego ogarnąć.
Prosiłbym o podpowiedz od czego zacząć
Pokaż jak kombinowałeś
Wracam do tematu
Wszystko co poniżej działa ale tylko na lokalu, niestety na serwerze hostingowym już niestety nie
<?php http://www.php.net/echo "OK"; /*************************************/ /********Socket Server*********************/ http://www.php.net/set_time_limit (0); // Set the ip and port we will listen on $address = '127.0.0.1'; $port = 3000; // Create a TCP Stream socket $sock = socket_create(AF_INET, SOCK_STREAM, 0); // 0 for SQL_TCP // Bind the socket to an address/port socket_bind($sock, 0, $port) or http://www.php.net/die('Could not bind to address'); //0 for localhost // Start listening for connections socket_listen($sock); //loop and listen while (true) { /* Accept incoming requests and handle them as child processes */ $client = socket_accept($sock); // Read the input from the client ? 1024000 bytes $input = socket_read($client, 1024000); // Strip all white spaces from input http://www.php.net/echo $input; http://www.php.net/flush(); http://www.php.net/ob_flush(); http://www.php.net/sleep(1); // Close the master sockets } socket_close($sock); ?>
var net = require('net'); function loop(){ var client = new net.Socket(); client.connect(3000, 'xxx', function() { console.log('Connected'); client.write('CZESC.'); }); client.on('data', function(data) { console.log('ODEBRANO: ' + data); client.destroy(); // kill client after server's response }); client.on('close', function() { console.log('Connection closed'); }); } setInterval(loop,3000);
Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^xxx.pl$ [NC] RewriteCond %{HTTPS} off RewriteRule ^xxx:3000%{REQUEST_URI} [P,QSA,L]
Co to za hosting? Jeżeli się nie mylę, to większość hostingów PHP nie pozwala na użycie serwera socket - ich zasada działania jest inna niż zwykłej strony www po HTTP (na porcie 80). Na VPS na pewno dasz radę to postawić.
Możesz sprawdzić, czy sockety są włączone na hostingu:
http://www.php.net/echo (http://www.php.net/extension_loaded('sockets')) ? 'true' : 'false'
Macie koledzy rację że to nie przejdzie, zostałem zmylony przez BOK że powinno działać dopiero ktoś inny zajął się sprawą i dopytał o jaki konkretnie typ danych jest dostarczany i mnie uświadomił że tak się nie da. (na wstępie rozmowy zaznaczałem im o co mi chodzi!!!)
Ale odblokowali dla mnie jeden port pod ten skrypt i .... niby "trochę" działa a trochę nie a trochę robi różnię.
Jeżeli odpalę klienta wszystko jest OK, śmiga aż milo ale jak zapodam transmisje z tego urządzenia to tylko raz przyjdą dane i na tym się kończy. Czas pomiędzy kolejną porcją danych to 30 sekund i tu pewnie jest problem, zauważyłem że jak odpalę skrypt i to urządzenie to wszystko działa i pomiędzy danymi ze skryptu klienta przewijają się paczki z tego urządzenia, a jak samo device to jest jedna wielka kupa.
"Zrobiłem" też skrypt w Node bo może... a nóż... niestety klient wywala jakiś exception i na tym się zabawa kończy, więc pozostanę przy PHP.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)