martinkoell
Goto Top

Kommunikation zwischen einer PHP Instanz (Apache) und einem PHP CLI Server auf einem Computer

Ich habe einen Computer (Debian) mit zwei Diensten:
Dienst 1) Auf dem Computer läuft ein PHP CLI als Websocket-Chatserver.
Dienst 2) Auf dem Computer läuft ein Apache2+PHP5 der beim Seitenaufruf Daten generiert.

Problem:
Die generierten Daten von Dienst 2 sollen auf irgendeine Art zum Dienst 1 übertragen werden damit dieser sie an die Websocket Clients sendet. Mein erster Versuch, eine PHP-PHP Websocket-Verbindung aufzubauen ist gescheitert.

Gibt es sonstige Möglichkeiten?

Grüße,
Martin

Content-Key: 197959

Url: https://administrator.de/contentid/197959

Printed on: April 26, 2024 at 15:04 o'clock

Member: Hitman4021
Hitman4021 Jan 31, 2013 at 04:37:48 (UTC)
Goto Top
Hallo,

PHP als Socket-Chatserver? Ohne Threading?

Nagut wenn du noch sagst um was für Daten es geht und ob das ganze in Echteit erfolgen muss kann man dir bestimmt helfen.

Gruß
Member: SlainteMhath
SlainteMhath Jan 31, 2013 at 08:42:30 (UTC)
Goto Top
Moin,

als erstes würde mir einfallen:

Austausch per (MY-)SQL DB
oder
Austausch per Filesystem

Apache/PHP5 schreibt, PHP-CLI liest und löscht.

lg,
Slainte
Member: Martinkoell
Martinkoell Feb 07, 2013 updated at 19:55:42 (UTC)
Goto Top
hi ihr beiden danke für die posts.

Austausch per SQL:
Der Websocket-Server in der CLI arbeitet bereits mit einer (MY)SQL-Tabelle, damit ich als Admin während des Betriebes von Ausserhalb die Clients auslesen kann ohne auf $'s zugreifen zu müssen.
Problem: Die SQL-Verbindung hat keinen Trigger, also "Event bei SQL Change" oder so.

Austausch per FS:
Derzeit habe ich es genau so gelöst. Eine Datei wird vom Apache2/PHP5 beschrieben und setzt gleichzeitig einen Eintrag in die DB.
Ist dann die Dateigröße > 1 checkt das der CLI-Server bei der Endless-While durch ein Fileopen und liest die "übergebenen" Werte aus der DB.
Der DB-Trigger ist somit eine Datei.

Ich hätt gern multidimensionale Arrays hin und hergeschoben face-wink

Die Funktionen getvar und putvar gehen bei mir auch nicht, obwohl php.ini variables_order ein "E" enthält..

Habt ihr ne bessere Idee als Trigger?
Doch eine Websocket-Verbindung zwischen den beiden PHP-Servern?

Das ganze läuft in Echtzeit, in der Minute werden etwa 500 Trigger ausgelöst face-wink

lg
Member: Martinkoell
Martinkoell Feb 07, 2013 updated at 23:46:38 (UTC)
Goto Top
okay. hab jetzt folgenden lösungsansatz:

zu beginn wird per globaler variable ein neue Socket-ressource erstelle:

$backendSocket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($backendSocket,'192.168.0.52',9000);
socket_listen($backendSocket,0);
socket_set_nonblock($backendSocket);


danach versuche ich in der mainloop (auf der auch auf websocket-verbindungen gewartet wird) dauernd auf verbindungsanfragen zu hören:

$bsbytes = @socket_recv($backendSocket, $buffer, 4096, 0);
echo $bsbytes;

dann kommt beim Server immer $bsbytes gleich "" und beim client kommt der Fehler: Connection refused (111)

Was mache ich falsch?
ich möchte eine if schreiben,
die eine mögliche verbindungsanfrage annimmt und den stream liest.

lg
Member: Martinkoell
Martinkoell Feb 07, 2013 at 23:49:39 (UTC)
Goto Top
okay mit

$backendSocket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($backendSocket,'192.168.0.52',9000);
// socket_set_blocking($backendSocket,0);
socket_set_nonblock($backendSocket);


loop:

$bsbytes = socket_listen($backendSocket,0);

if ($bsbytes)
{
socket_accept($backendSocket);
}


gings.
danke