tempteam
Grünschnabel
Hallo Leute,
Ich bin schon am Verzweifeln, hab hier komische Phänomene, die ich mir nicht erklären kann. Ich hoffe, Ihr könnt mir weiter helfen.
Kurz zu der Aufgabe:
ich arbeite an einer Anwendung, wo parallel bis zu 150 Clients aktiv sind (kann auch mehr sein). Bei der Kommunikation setze ich selbst geschriebenes PHP-Websocket ein.
Zum Server:
OS: Ubuntu 16.04
PHP: 7.1.0RC1
Webserver: Nginx
Zu den Phänomenen:
Ab und zu spuckt socket_recv mir den 104 Fehler (Connection reset by peer) aus.
Zuerst dachte ich, dass die Ressource verloren geht, aber beim Debuggen war sie immer da. Deswegen keine Ahnung was hier noch falsch laufen kann.
Und bei dem zweiten Phänomen, bleibt der Websocket-Server einfach nach einer XXX Zeit hängen. Auch in der Console passiert nix mehr. Erst nach dem man es über die Console neue startet, kann es weiter gehen.
Und das passiert meistens wenn der Socket sehr belastet wird.
Hat jemand Idee ?
Ich bin schon am Verzweifeln, hab hier komische Phänomene, die ich mir nicht erklären kann. Ich hoffe, Ihr könnt mir weiter helfen.
Kurz zu der Aufgabe:
ich arbeite an einer Anwendung, wo parallel bis zu 150 Clients aktiv sind (kann auch mehr sein). Bei der Kommunikation setze ich selbst geschriebenes PHP-Websocket ein.
Zum Server:
OS: Ubuntu 16.04
PHP: 7.1.0RC1
Webserver: Nginx
Zu den Phänomenen:
Ab und zu spuckt socket_recv mir den 104 Fehler (Connection reset by peer) aus.
PHP:
// Receives data from a connected socket
$bytes = socket_recv($resource, $buffer, 4096, 0);
if ($bytes === FALSE) { // Received data has errors
$errorMsg = 'socket_recv returns an error ' . socket_strerror(socket_last_error());
// Log to the log file
Logger::addData($errorMsg);
Logger::addData('Client ' . $address . ':' . $port);
Logger::toFile(self::LOG_FILE_NAME);
// Console log
SocketHelper::writeLog(array($errorMsg, 'Error code ' . socket_last_error()));
// Close connection
$this->_closeConnection(array('id' => $index, 'resource' => $resource));
}
else if ($bytes > 0) { // received data are fine
// Console log
SocketHelper::writeLog(array('Received bytes ' . $bytes . ' from client ' . $address . ':' . $port));
// Share date to the clients
Client::broadcastData($this->_getStorage(), array('id' => $index, 'resource' => $resource), $buffer, $bytes, $this->getModelByKey('domain'));
}
Zuerst dachte ich, dass die Ressource verloren geht, aber beim Debuggen war sie immer da. Deswegen keine Ahnung was hier noch falsch laufen kann.
Und bei dem zweiten Phänomen, bleibt der Websocket-Server einfach nach einer XXX Zeit hängen. Auch in der Console passiert nix mehr. Erst nach dem man es über die Console neue startet, kann es weiter gehen.
Und das passiert meistens wenn der Socket sehr belastet wird.
Hat jemand Idee ?