Express 3 と socket.io を使用して作成しているアプリにプライベート メッセージングを実装しようとしています。
クライアントがルームに接続すると、クライアントのユーザー ID が自動的に作成され、参加します。これは主に通知とその種のものです。これをプライベートチャットでも機能させようとしています.ユーザーが送信ボタンをクリックすると、メッセージは送信者のユーザーID(セッションユーザーIDから)および非表示のフィールドまたは属性から取得した所有者のユーザーIDとともに送信されます要素の。そして送信者は、所有者のユーザー ID 名前空間でルームに参加します。これに関する問題は、送信者が別のページに移動したり、ブラウザーを更新したりすると、部屋から切断され、所有者からそれ以上のメッセージを受信しないことです。オーナー ルームに再び参加するには、新しいメッセージを送信する必要があります。所有者の部屋への接続をどのように確認できますか?それとも私はこれをすべて間違っていますか?これを達成するためのより良い方法または標準的な方法はありますか?
サーバ:
io.on('connection', function (socket) {
var sh = socket.handshake;
socket.join(sh.session.userid);
socket.on('chat', function (data) {
if (data.user) {
socket.join(data.owner);
}
io.sockets.in(data.owner).emit('chat',
{user: sh.session.user, message: data.message});
});
});
クライアント:
var socket = io.connect('https://localhost/');
$('#send_message').click(function (e) {
socket.emit('chat',{message: $('.message').val(),
user:$('#user'), owner:$('#owner')} //Get this from hidden fields in chat form );
e.preventDefault();
});
socket.on('chat', function (data) {
$('ol').prepend('<li>' + data.user + '<br />' + data.message + '</li>');
});