Devo collegare un server remoto con connessione socket asincrona e dati reteive. Posso collegarmi ma c'è un problema.Dimensione buffer client socket asincrono
I pacchetti vengono inviati a pezzi. Ho due opzioni; Posso impostare un buffer e ottenere tutto il pacchetto in un unico pezzo o combinare pezzi quando tutti i trasferimenti effettuati. Penso che la prima opzione (cosa tampone) sia la strada giusta.
Sto definendo una dimensione del buffer ma non funziona nella prima parte. In altre parti, funziona ma con questo metodo non riesco a ottenere l'intero pacchetto in un unico pezzo perché la prima parte è limitata con 5,24 Kb.
Potete trovare il mio codice qui sotto:
$loop = React\EventLoop\Factory::create();
$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
$connector = new React\SocketClient\Connector($loop, $dns);
$connector->create(ENDPOINT_IP , ENDPOINT_PORT)->then(function (React\Stream\Stream $stream) use ($loop) {
$command = '{C:"EL",bmId:43,inst:"my_instance",tok:"my_token"}';
$command_length = strlen($command);
$command_length = pack("N", $command_length);
$stream->write($command_length);
$stream->write($command);
$stream->bufferSize = 999999;
$stream->on('data', function ($data) {
$package = substr($data, 0, 4);
$unpack = unpack('N', $package); // I'm getting whole package size
echo $data;
});
});
$loop->run();
ho cercato di definire una dimensione del buffer sotto $stream->on('data', function ($data) {
linea, ma come si indovina è fallito. Non so come gestirlo nel modo giusto.
Grazie in anticipo.
In realtà ho provato un sacco di cose compresi i vostri suggerimenti ma il risultato è lo stesso. –
Hm, non hai specificato quale problema esatto hai. Si prega di inviare ciò che si riceve come risultato e cosa è previsto. Se si ricevono più pacchetti di una risposta uno in uno, è necessario disporre di una logica aggiuntiva. Quando tutti i dati per un pacchetto sono arrivati di solito, riceverete una parte del pacchetto successivo nella stessa risposta. Questi dati in eccesso che devi salvare e utilizzare nella prossima iterazione come dati di partenza. – BJovke