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-ID: 197959

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

Ausgedruckt am: 19.12.2024 um 07:12 Uhr

Hitman4021
Hitman4021 31.01.2013 um 05:37:48 Uhr
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ß
SlainteMhath
SlainteMhath 31.01.2013 um 09:42:30 Uhr
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
Martinkoell
Martinkoell 07.02.2013 aktualisiert um 20:55:42 Uhr
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
Martinkoell
Martinkoell 08.02.2013 aktualisiert um 00:46:38 Uhr
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
Martinkoell
Martinkoell 08.02.2013 um 00:49:39 Uhr
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