2
PHPとラチェットで書かれた小さなshoutboxチャットがあります。 JSで手動でWebソケットのonmessageイベントをトリガー
は、私は現時点で押下する上で起こる通常のJavaScript機能を起動以下のイベント、持っている:
socket.onmessage = function(evt) {
var data = JSON.parse(evt.data);
addMessage(data.msg);
};
動作しますが、私はメッセージを書きたい「ユーザーが入力しています」ユーザーが入力中でメッセージが実際に送信される前に、私はonmessage
イベントを手動で呼び出す必要があると推測しています。
関連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);
};
をしかし、どのように私は自分のイベントを追加しますか? onmessageは、メッセージがすでに送信されたときに発生します。 – user6562256
'onmessage'イベントは、あなたのコードのどこかで呼び出すために発生します(ユーザがenterを押したときに言いました)。それはあなたが他の場所でそれを送ることができないことを意味しません(誰かが入力しているときのように)。あなたはデータを変更することができますので、イベントをキーとして渡すだけです(つまり、socket.sendMessage({event: 'message'、msg: 'テスト'});)、それを解析することができます他のクライアントに – FrankerZ
要約すると:複数のメッセージをサーバーに送信する: '{type: 'message'、msg: 'testing'}'、ユーザーがエンターを押したとき。ユーザーが入力を開始するときに '{type: 'typing'}'を送信します。タイムアウト期間の後に '{type: 'typingStopped'}'を送信して、他のユーザに、もはや停止していないことを通知します。どのタイプのイベントが起こったのか(メッセージ、タイプ、またはタイピングされたもの)を把握し、ハンドラを適切に起動するには、他のクライアントで 'type'を解析します。 – FrankerZ