Lassen Sie mich das Problem erklären: Ich erstelle ein System, das Sensoren verwendet, um einige Daten zu lesen, und jeder Sensor muss diese Daten an einen Server senden, der jede in einer neue Zeile auf der Seite empfangene Nachricht druckt.class Sensor extends Thread implements ISensor
{
....
public function readValue(){
$this->value = rand( -15 , 40 );
$this->timestamp = date('Y-m-d H:i:s');
}
public function run(){
$number = 0;
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Couldn't create socket");
$this->connectionResult = socket_connect($this->socket, $this->ip, (int)$this->port) or die("Couldn't connect to server");
while($number requestNumber){
$number = $number + 1;
$this->readValue();
$this->sendData();
sleep($this->frequency);
}
socket_close($this->socket);
}
public function sendData(){
$input = $this->toString();
socket_write($this->socket, $input, strlen($input)) or die ("Impossible send message");
}
< /code>
server.php
set_time_limit (300);
$address = '127.0.0.1';
$port = 19000;
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $address, $port) or die('Could not bind to address');
socket_listen($sock);
while (true) {
$client = socket_accept($sock);
while (0 != socket_recv($client, $message, 1024, 0))
{
echo $message . "
";
}
socket_close($client);
}
socket_close($sock);
< /code>
Das erwartete Ergebnis war, dass die Clients eine Verbindung zum Server herstellen und Nachrichten senden können (dies funktioniert einwandfrei), während der Server für jede empfangene Nachricht einfach eine neue Zeile druckt. unter) < /p>
< /p>
Zweiter Sensor, während der erste noch lief und dann die Nachrichten so druckt. Wenn ich die while -Loop entferne, drucke der Server einfach eine einzige Nachricht für jede Sensoren.
Problem beim Versuch, Nachrichten zu drucken, die von mehr Clients empfangen werden ⇐ Php
-
- Similar Topics
- Replies
- Views
- Last post