node.js - specific - socket.io id
Salas dinĂ¡micas con Socket.io y Nodo (1)
Estoy tratando de usar la nueva función de "sala" en Socket.io v.7 para crear salas de chat dinámicas, pero tengo problemas para que las salas estáticas funcionen en mi ejemplo. Según la URL que el usuario seleccione, deben terminar en room1 o room2. Todo lo que el usuario ingrese en el chat debe transmitirse a los usuarios en la misma sala. Tengo 2 navegadores (chrome & ff) cada uno con una pestaña abierta en / room1 y / room2, sin embargo, nada de lo que escriba parece ser transmitido a las otras pestañas. ¿Qué estoy haciendo mal?
Código de servidor
var app = require(''express'').createServer();
var io = require("socket.io").listen(app);
io.sockets.on(''connection'', function (socket) {
// join to room and save the room name
socket.on(''join room'', function (room) {
socket.set(''room'', room, function() { console.log(''room '' + room + '' saved''); } );
socket.join(room);
})
socket.on(''message'', function(data) {
console.log("Client data: " + data);
// lookup room and broadcast to that room
socket.get(''room'', function(err, room) {
//room example - https://github.com/learnboost/socket.io
// neither method works for me
socket.broadcast.to(room).emit(''new fan'');
io.sockets.in(room).emit(''new non-fan'');
})
})
});
app.get(''/room1'', function(req, res){
res.render(''example2-client.ejs'', {layout:false});
});
app.get(''/room2'', function(req, res){
res.render(''example2-client-2.ejs'', {layout:false});
});
app.listen(4000);
Código de cliente habitación 1
<!DOCTYPE HTML>
<html><head>
<title>Code review for Snipet</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="http://localhost:4000/socket.io/socket.io.js"></script>
<script>
$(document).ready(function() {
var socket = io.connect(''http://localhost:4000'');
$("#msgbox").keypress( function(event) {
if (event.which == ''13'') {
sendmsg();
event.preventDefault();
}
});
socket.on(''connect'', function (data) {
socket.emit(''join room'', ''room1'' );
});
socket.on(''message'', function (data) {
add_message(data);
});
function add_message(m) {
$("#chatlog").append(m);
$("#chatlog").append("<BR>");
}
function sendmsg()
{
var r = $("#msgbox").val();
socket.emit(''message'', r );
add_message(r);
$("#msgbox").val('''');
}
});
</script>
</head>
<body>
<div id="chat" style="height: 200px; width: 200px; border: 1px solid grey;">
<div id="chatlog" style="height: 178px; width: 200px; overflow-y: scroll;"></div>
<input type="text" id="msgbox" style="margin-left: 2px; width: 193px;">
</div>
</body>
</html>
Código de cliente 2
<!DOCTYPE HTML>
<html><head>
<title>Code review for Snipet</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="http://localhost:4000/socket.io/socket.io.js"></script>
<script>
$(document).ready(function() {
var socket = io.connect(''http://localhost:4000'');
$("#msgbox").keypress( function(event) {
if (event.which == ''13'') {
sendmsg();
event.preventDefault();
}
});
socket.on(''connect'', function (data) {
socket.emit(''join room'', ''room2'' );
});
socket.on(''message'', function (data) {
add_message(data);
});
function add_message(m) {
$("#chatlog").append(m);
$("#chatlog").append("<BR>");
}
function sendmsg()
{
var r = $("#msgbox").val();
socket.emit(''message'', r );
add_message(r);
$("#msgbox").val('''');
}
});
</script>
</head>
<body>
<div id="chat" style="height: 200px; width: 200px; border: 1px solid grey;">
<div id="chatlog" style="height: 178px; width: 200px; overflow-y: scroll;"></div>
<input type="text" id="msgbox" style="margin-left: 2px; width: 193px;">
</div>
</body>
</html>
Parece que no estás escuchando estos eventos
socket.broadcast.to(room).emit(''new fan'');
io.sockets.in(room).emit(''new non-fan'');
en el lado del cliente usted necesita:
socket.on(''new fan'', function (data) {
console.log(''new fan'');
});
Tampoco estás enviando el mensaje a los clientes. Dentro:
socket.on(''message'', function(data) { })
en el servidor, necesita hacer:
io.sockets.in(room).emit(''message'', data);