socket.io用户加入房间,但房间后消失。 (NodeJS,Socket.IO,MacOSX上的Express)

时间:2014-01-20 20:17:44

标签: node.js sockets socket.io

这是我第一次将插座连接到特定的房间,所以也许我不明白发生了什么。 在我的应用程序中,用户可以加入游戏,我想要他们,只有他们能够在彼此之间进行通信,所以房间对我来说是理想的。但每次我设法让一个插座加入一个房间,不久之后,房间就消失了。

这是我的布局,我将套接字连接到服务器,我还显示一个按钮,用于向服务器“showMeRooms”发送套接字消息,这将使服务器显示控制台中的现有房间=>它仅用于测试目的:

<!doctype html>
<html>
    <head>
        <title>Bienvenue sur Pictionnary MTL</title>
        <script src="/socket.io/socket.io.js"></script>
        <script>
            var socket = io.connect('http://localhost:3000');
            socket.on('test', function(data) {
            console.log(data);
            });
    </script>
    </head>
    <body>

        <!-- the click sends showMeRooms to the server which will console.log the existing rooms -->
        <button onclick='socket.emit("showMeRooms");'>Show me the rooms</button>

        <!-- Include flash error here -->
        <% if(typeof flash!=='undefined'){ %><h1><%= flash %></h1><% } %>

        <ul>
            <li><a href='/room'>Rooms</a></li>
        </ul>
        <%- body %>
    </body>
</html>

以下是我的房间展示视图的一部分,其中显示了用户加入房间的按钮,或者如果他已经在房间内则会离开房间:

<% layout('../layout') -%>
<h1>This is a room</h1>
<% if(!activeUser.isInRoom){ %>
<form method='post' action='/room/join'>
    <input type="hidden" name='room_id' value='<%= room._id %>' />
    <input type="submit" value='Join the room' onclick='socket.emit("subscribe", { room: "room_<%= room._id %>" });' />
</form>
<% } else { %>
<form method='post' action='/room/disjoin'>
    <input type="hidden" name='room_id' value='<%= room._id %>' />
    <input type="submit" value='Disjoin the room' onclick='socket.emit("unsubscribe", { room: "room_<%= room._id %>" });' />
</form>
<% } %>

最后,这是我的套接字控制器:

module.exports.controller = function(app, io) {

    io.sockets.on('connection', function(socket) {
        socket.on('subscribe', function(data) {
            socket.join(data.room);
            console.log('client: ' + socket.id + ' joined the room: ' + data.room + ', now there is/are :' + io.sockets.clients(data.room).length + ' player(s) in this room');
        });

        socket.on('unsubscribe', function(data) {
            socket.leave(data.room);
            console.log('client: ' + socket.id + ' left the room: ' + data.room + ', now there is/are :' + io.sockets.clients(data.room).length + ' player(s) in this room');
        });

        socket.on('chat', function(data) {
            socket.broadcast.to(data.room).emit('message', data.message);
        });

        socket.on('countClientsInRoom', function(room) {
            var cnt = io.sockets.clients(room).length;
            console.log(cnt+' clients in room: ' + room);
        });

        socket.on('showMeRooms', function() {
            //console.logs the existing rooms
            console.log(io.sockets.manager.rooms);
        });
    });

}

所以,我所做的是让用户在点击加入按钮时(在房间显示视图中)“订阅”(加入)房间,此操作将在控制台中显示一条消息,例如:

客户:BOIo8p6ZeYSZyKvwKkW_加入了房间:room_52dd7b30c40336683d200f67,现在这个房间里有1个玩家

当它显示消息时,房间里有一个用户,但在此之后,当我点击“显示我的房间”按钮(在布局中的主体顶部)时,会发出showMeRooms套接字消息,我收到的消息是:

{'':    ['pABJ6nFMK1_QBs5JMo6B',      '5qnq5uy2lm-3T7hkMo6C',      'A3M99mfldG_Q52KDMo6D',      'HudoJiU-UO9j-mvZMo6F']}

我的房间不是其中之一,(我还通过向房间的用户发出测试消息尝试了另一项测试,但它不起作用)。

所以我的问题是发生了什么: - )。

感谢您的帮助

0 个答案:

没有答案