Socketbasierter Chat - einige Fragen

Master21

Grünschnabel
Hi Leute,

ich bin momentan dabei einen Chat in PHP zu schreiben,
der auf Sockets basiert.

Schon klar, es gibt einige fertige Sachen, aber mir ist lieber
ich fang von null auf an und weiß genau was wo ist,
als ich muss mich erst in den Code hineinarbeiten weil ich was ändern will.

Der Server ansich rennt soweit - der wurde in C geschrieben,
und parst die gesendeten Daten entsprechend.

Jetzt kommt der Punkt, wo der Client ins Spiel kommt.
Prinzipiell habe ich es schon geschafft,
einen Client zu schreiben, allerdings nur einen wo man zusehen kann ^^.

Der Knackpunkt ist jetzt: Wie schaffe ich es am besten Daten an den Server zu senden?

Momentan fallen mir hierzu 2 Varianten ein:
*) Eigener Frame, der eine Socket-Verbindung zusätzlich aufbaut,
Benutzerkennung etc schickt, und die Verbindung wieder schließt.
*) Daten über die bestehende Verbindung senden

Ab einer gewissen Anzahl Leute ist das jedoch relativ unpraktikabel
mit einer Zusatz-Verbindung, weil ich pro User 2 Connections dann habe.

Nachdem ich jetzt einiges über AJAX gelesen habe, dachte ich mir,
es müsste doch theoretisch möglich sein, den Text den die Leute schreiben,
via AJAX in der BESTEHENDEN Verbindung zum Socket-Server zu senden.
Dadurch erspar ich mir nen Eingabe-Frame, und ne zusätzliche Connection.

Ist das so theoretisch realisierbar? Wenn ja, wird das auch in einer While-Schleife funktionieren?

Der Client ist momentan folgender:
Code:
<?php
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
if ($sock < 0) echo "socket_create() failed: reason: " . socket_strerror ($sock) . "\n";
socket_set_nonblock($sock);
@socket_connect($sock,"xxx.xxx.xxx.xxx", 8000);
socket_set_block($sock);
socket_send($sock,"<chat_entering>$user;-|-;$sid;-|-;$ip</chat_entering>", 1024, 0x100);
while(($text=socket_recv($sock,$buf,1024,0))>0)
{
 $asc=ord(substr($buf, -1));
 if ($asc==0)
 {
  break;
 }
 else
 {
  $read=$buf;
  echo $read;
  echo "<br>";
 }
 flush();
}
socket_close($sock);

?>

Ich habe hier also quasi eine Seite die endlos lädt,
und wenn vom Server eine Nachricht kommt, wird die mittels flush(); ausgegeben.

Mein Ziel ist es jetzt, hier irgendwo ein Formular einzubauen,
mit ner Eingabezeile, was die Daten mittels AJAX, über die
bereits bestehende Verbindung, an den Server sendet.

Durch AJAX erspare ich mir das neuladen der Seite,
und muss somit die bisherigen Ausgaben nicht zwischenspeichern.

Was meint ihr, würde das hinhaun? Wenn ja, konkrete Vorschläge?
 
Zurück