Ich habe einen kleinen Shoutbox-Chat mit PHP und Ratchet geschrieben.Trigger Web-Socket OnMessage Event manuell
In JS, ich habe das folgende Ereignis, das eine regelmäßige js Funktion löst die Eingabe zur Zeit beim Drücken passiert:
socket.onmessage = function(evt) {
var data = JSON.parse(evt.data);
addMessage(data.msg);
};
das funktioniert, aber ich möchte eine Nachricht schreiben „Benutzer ist die Eingabe“ Während der Benutzer tippt und bevor die Nachricht tatsächlich gesendet wird, muss ich das onmessage
Ereignis manuell aufrufen, ist das möglich?
relevant js:
var chat = $('#chatwindow');
var msg = $('#messagebox');
function addMessage(msg) {
chat.append("<p>" + msg + "</p>");
}
msg.keypress(function(event) {
if (event.which != 13) {
return;
}
event.preventDefault();
if (msg.val() == "" || !open) {
return;
}
socket.send(JSON.stringify({
msg: msg.val()
}));
addMessage(msg.val());
msg.val("");
});
socket.onmessage = function(evt) {
var data = JSON.parse(evt.data);
addMessage(data.msg);
};
Aber wie würde ich mein eigenes Event hinzufügen? Die Meldung tritt auf, wenn eine Nachricht bereits gesendet wurde. – user6562256
Das 'onmessage'-Ereignis tritt auf, weil Sie es irgendwo in Ihrem Code aufrufen (Sie erwähnten, wenn ein Benutzer die Eingabetaste drückt), der es an den Server weiterleitet. Das bedeutet nicht, dass Sie es nicht an anderen Orten senden können (wie wenn jemand schreibt). Da Sie die Daten beliebig modifizieren können, übergeben Sie das Ereignis einfach als Schlüssel (zB. Socket.sendMessage ({event: 'message', msg: 'testing'}); '), damit Sie es analysieren können auf dem anderen Client. – FrankerZ
Zusammenfassend: Senden Sie mehrere Nachrichten an den Server: '{type: 'message', msg: 'testing'}', wenn der Benutzer die Eingabetaste drückt. Senden Sie '{type: 'typing'}', wenn der Benutzer mit der Eingabe beginnt. Senden Sie '{type: 'typingStopped'}' nach einer Zeitüberschreitung, um den anderen Benutzer darüber zu informieren, dass sie nicht mehr gestoppt sind. Parsen Sie 'type' auf dem anderen Client aus, um herauszufinden, welcher Ereignistyp aufgetreten ist (Nachricht, Typisierung oder typingStopped), und feuern Sie Ihre Handler entsprechend ab. – FrankerZ