这是我第一次将插座连接到特定的房间,所以也许我不明白发生了什么。 在我的应用程序中,用户可以加入游戏,我想要他们,只有他们能够在彼此之间进行通信,所以房间对我来说是理想的。但每次我设法让一个插座加入一个房间,不久之后,房间就消失了。
这是我的布局,我将套接字连接到服务器,我还显示一个按钮,用于向服务器“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']}
我的房间不是其中之一,(我还通过向房间的用户发出测试消息尝试了另一项测试,但它不起作用)。
所以我的问题是发生了什么: - )。
感谢您的帮助
垫