Moin!
In den anderen Zweigen geht es ja meist um spezielle Randprobleme. Wie weit bist du mit der eigentlichen Aufgabe gekommen? Besteht da noch Klärungsbedarf und wenn ja?
Naja noch garnicht, ging ja bisher nur um den noch nicht vorhandenen Kontextwechsel.
use Net::WebSocket::Server;
Net::WebSocket::Server->new(
listen => 8080,
on_connect => sub {
my ($serv, $conn) = @_;
$conn->on(
handshake => sub {
my ($conn, $handshake) = @_;
},
utf8 => sub {
my ($conn, $msg) = @_;
$_->send_utf8($msg) for $conn->server->connections;
},
binary => sub {
my ($conn, $msg) = @_;
$_->send_binary($msg) for $conn->server->connections;
},
);
},
)->start;
und dazu gehöriges javascript etwa :
/* Nachricht senden */
function sendit(){
var mesg = rltrim(document.getElementById('mesg').value);
if( ! mesg.length ) {
document.getElementById('mesg').value = '';
return false;
}
ws.send(JSON.stringify({mesg: mesg, nickname: '%nickname%'}));
document.getElementById('mesg').value = '';
return false;
}
/* Nachricht im Browser anhängen */
ws.onmessage = function (e) {
var dataobj = JSON.parse(e.data);
var outtab = document.getElementById('outtab');
var mesg = dataobj.mesg;
var row = outtab.insertRow(0);
var cell = row.insertCell(0);
$(cell).css('font-family','Courier New, Courier, monospace');
$(cell).text(mesg);
var nickname = decodeURIComponent(dataobj.nickname);
row = outtab.insertRow(0);
$(row).css({'background-color': '#369', 'color': 'white'});
cell = row.insertCell(0);
$(cell).css('font-family','Courier New, Courier, monospace');
$(cell).text(nickname+' schrieb um '+hms());
};
function hms(){
var d = new Date();
return d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();
}
Laut pl sieht so, oder ähnlich, der Websocket in perl aus. Mit perl hatte ich noch garnichts zu tun, also verstehe ich da eher weniger. Ich habe mir aber schon einige Beispiele mit javascript angeschaut die da etwa so aussehen:
var connection = new WebSocket('ws://url', ['soap', 'xmpp']);
/ When the connection is open, send some data to the server
connection.onopen = function () {
// Sending String
connection.send('your message');
};
// Log errors
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
// Log messages from the server
connection.onmessage = function (e) {
console.log('Server: ' + e.data);
};
Nur so sehr weit reicht mein javascript Horizont leider auch nicht, dass ich da nach meinen Wünschen munter los manipulieren könnte.
Zusätzlich schaffe ich es schon in der Ausgangsversion nicht, mehere Tabellen anzusprechen. Sprich der javascript Funktion list_chat()
die ganzen Werte aus den Checkboxen mitzugeben und die dann in die chat_list.php
zu migrieren. Genauso wie post_chat()
einen Wert mitgeben damit chat_insert.php
weiss, in welche Tabelle (wie und was) geschreiben werden soll.
Mit anderen Worten, den Chatverlauf nicht zu speichern, ist gar kein Vorteil bezogen auf die Anforderungen. Auch ist es völlig unabhängig von der verwendeten Übertragungsmethode, ob die Daten gespeichert werden sollen oder nicht. Ich sehe grade nicht, warum Websocket einen Vorteil gegenüber anderen Verfahren bieten soll, was das Speichern oder Nichtspeichern von Daten angeht. Ob die eine oder andere Übertragungsmethode besser oder schlechter für den gegebenen Anwendungsfall ist, kann man herausfinden und das ist auch sinnvoll. Nur das Speichern hat da keine Aktie dran.
Sicher, dass reine speichern des Chatverlaufs hat performant nichts mit einem Websocket zutun. Es geht ja nur darum die chat_list()
nicht jede Sekunde für jeden User der gerade "online" ist auszuführen und immer wieder die gleichen Daten neu aus der Datenbank zu ziehen.
Gruß Jo