簡體   English   中英

Socket.io將兩個客戶端添加到房間

[英]Socket.io add two clients to room

我正在嘗試使用express 3和socket.io在app中實現私人消息

當客戶端將房間與客戶端連接時,將自動創建並加入userid。 這主要是針對通知和那種東西。 現在我也嘗試將此工作用於私人聊天。當用戶單擊發送按鈕時,消息將與發件人的用戶ID(來自會話用戶ID)以及從隱藏字段或屬性中抓取的所有者的用戶ID一起發送元素。 發件人使用所有者userid名稱空間加入會議室。 這樣做的問題是,當發件人轉到另一個頁面或刷新瀏覽器時,他會被從房間中取消,並且不會收到來自所有者的任何進一步消息。 他必須發送一條新消息才能重新加入主人房間。 現在,我如何確定與業主房間的連接? 或者我這樣做是錯的嗎? 有沒有更好或更標准的方法來實現這一目標?

服務器:

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>');
});

對。 因為當您重新加載頁面時,服務器會收到“客戶端斷開連接”消息並取消訂閱套接字。 客戶端需要重新發出“聊天”消息(具有相同的所有者ID)才能返回私有Feed。

一種方法是讓客戶端將所有者ID保存在cookie中,並在每次加載頁面時調用它。 或者,您可以讓服務器存儲並使用會話cookie(http://www.senchalabs.org/connect/session.html)調用此信息,這實際上與第一個選項非常相似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM