Guten Morgen!
Es gibt auch Websocket-Implementationen für PHP, beispielsweise Ratchet.
So gestern Abend hab ich da nochmal ein wenig drüber nachgegrübelt und hab mir gedacht, dass müsste doch garnicht so schwer sein das php Beispiel etwas zu verbiegen. Folgende Idee hatte ich da.
<?php
namespace MyApp;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Chat implements MessageComponentInterface {
public function onOpen(ConnectionInterface $conn) {
}
public function onMessage(ConnectionInterface $from, $msg) {
/* Der Funktion onMessage könnte man ja noch ein wenig mehr Variablen mitgeben. zum Beispiel für eine Abfrage in Welche Tabelle etwas in die DB geschrieben wird. Sprich die Informationen aus den Checkboxen. Bezug zu Kommentar 2 */
}
public function onClose(ConnectionInterface $conn) {
}
public function onError(ConnectionInterface $conn, \Exception $e) {
}
}
<?php
namespace MyApp;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Chat implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
// Store the new connection to send messages to later
/*Die Infos aus den checkboxen müssten ja mindestens hier einmal auftachen, dann würden sie aber nicht erneuert, wenn ein client ein neues häckchen setzt/entfernt erneuert, oder?
$this->clients->attach($conn);
echo "New connection! ({$conn->resourceId})\n";
}
public function onMessage(ConnectionInterface $from, $msg) {
$numRecv = count($this->clients) - 1;
echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n"
, $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's');
foreach ($this->clients as $client) {
/* Kommentar 2 : Dann könnte man hier im if fragen in welche tabelle man eine neue Zeile anlegen will und $msg und alles was man eben hat in ein SQL-Statement basteln.*/
/* etwa so:
if ($to !== $world) {
**SQL
if($clients ???){
$client->send($msg , ...);
}
**jetzt müsste ich hier noch irgendwie Informationen aus onOpen (?) herkriegen die sagen welcher client welche Nachrichten lesen will (Die Infos aus dem SELECT)
}*/
}
}
public function onClose(ConnectionInterface $conn) {
// The connection is closed, remove it, as we can no longer send it messages
$this->clients->detach($conn);
echo "Connection {$conn->resourceId} has disconnected\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "An error has occurred: {$e->getMessage()}\n";
$conn->close();
}
}
Was da dafür unbedingt brauchst, ist der Zugriff auf den Server, denn Websocket ist serverseitig nicht einfach nur ein PHP-Script, das über Requests aufgerufen wird. Da muss ständig ein separater Server auf Verbindungsversuche lauschen. Und diesen Server musst du starten können, was nicht damit getan ist, per FTP Dateien ins DocumentRoot des Webservers zu legen.
Ähm...^^ SRY Denn ersten Satz versteh ich noch, dann wird kritisch.
Gruß Jo