rooms - La devolución de llamada del servidor socket.io de Node.js no funciona
socket.io example (2)
Estoy trabajando en un simple canal de comunicación bidireccional cliente / servidor Node.js y estoy intentando usar socket.io en el servidor y socket.io-client en el cliente.
He insertado el código a continuación, ya que verá que es bastante básico, y estoy ejecutando ambos en mi máquina local para minimizar la complejidad.
El comportamiento que estoy viendo es:
- Comienzo el servidor.
- El servidor registra ''Servidor iniciado'' en la consola.
- Comienzo el cliente.
- El cliente registra ''¡El servidor está listo!
- Nada más sucede ...
Lo que esperaría es que el servidor inicie sesión en "¡El cliente está listo!" mensaje y luego el contenido ( ''Listo recibido'' ).
Incluso he usado WireShark para olfatear la línea y parece que el cliente está emitiendo el mensaje, tal como está diseñado, pero la devolución de llamada en el servidor no se está disparando.
Estoy ejecutando el nodo v0.8.4 con express v3.1.0 , socket.io v0.9.13 y socket.io-client v0.9.11 (todos instalados a través de npm ).
Aquí está el código del servidor ...
var http = require(''http''),
express = require(''express''),
app = express(),
server = http.createServer(app);
app.configure(function(){
app.use(express.static(__dirname + ''/public''));
});
server.listen(8080);
console.log("Server started");
var io = require(''socket.io'').listen(server);
io.sockets
.on(''connection'', function(socket){
socket.emit(''server ready'', { msg: ''ready'' }) ;
})
.on(''comms'', function(content) {
console.log(''Client is ready!'');
console.log(content);
});
Y aquí está el código del cliente ...
var clientio = require(''socket.io-client'');
var socket = new clientio.connect(''http://localhost'', { port: 8080 });
socket
.on(''server ready'', function(data){
console.log(''Server is ready!'');
socket.emit(''comms'', ''Ready received'');
})
.on(''connect-error'', function(error) {
console.log(''Connection Error/n'' + error);
})
.on(''error'', function(error) {
console.log(''Socket Error/n'' + error);
})
La documentación y los ejemplos de socket.io y socket.io-client son algo confusos (para ser caritativos) y parecen ser un objetivo móvil ... pero por lo que puedo decir, creo que esto debería funcionar.
Espero que alguien pueda darme consejos sobre dónde me estoy equivocando.
En tu servidor tienes este código:
io.sockets
.on(''connection'', function(socket){
socket.emit(''server ready'', { msg: ''ready'' }) ;
})
.on(''comms'', function(content) {
console.log(''Client is ready!'');
console.log(content);
});
Lo que debes hacer es algo como esto:
io.sockets.on(''connection'', function(socket){
socket.emit(''server ready'', { msg: ''ready'' });
socket.on(''comm'', function(content){
console.log(''Client is ready!'');
console.log(content);
});
});
con suerte, esto está haciendo más o menos lo que necesita hacer. Solo un par de cambios menores.
app.js
var app = require(''express'')()
, server = require(''http'').createServer(app)
, io = require(''socket.io'').listen(server);
// using ''connect'' to handle static pages
app.use(require(''connect'').static(__dirname + ''/public''))
server.listen(8080);
app.get(''/'', function (req, res) {
res.sendfile(__dirname + ''/index.html'');
});
io.sockets.on(''connection'', function (socket) {
socket.emit(''server ready'', { msg: ''ready'' });
socket.on(''comms'', function(content) {
console.log((''Client is ready/n''));
console.log(content);
});
});
index.html
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
window.jQuery || document.write(''<script src="js/jquery-1.8.3.min.js"><//script>'')
</script>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<script>
(function (d, b) {
function bindEvents() {
function doSomething(msg) {
$.each(msg, function (key, value) {
console.log(''doSomething...'');
$("body").append("<p>" + value + "</p>")
});
};
// var socket = io.connect();
var socket = io.connect(''http://localhost'');
socket.on(''server ready'', function (msg) {
console.log(''Server is ready!/n'', msg);
doSomething(msg);
socket.emit(''comms'', {
msg: ''Client is Ready''
});
});
socket.on(''connect-error'', function (err) {
console.log(''Connection Error/n'', err);
});
socket.on(''error'', function (err) {
console.log(''Connection Error/n'', err);
});
};
$(document).ready(function () {
bindEvents()
});
})(jQuery, this)
</script>