2013-02-17 23 views
6

Pracuję nad prostym dwukierunkowym kanałem komunikacji klient/serwer Node.js i próbuję użyć socket.io na serwerze i gniazda . klient-klient na kliencie.Node.js wywołanie zwrotne serwera socket.io nie działa

Dodałem kod poniżej, ponieważ zobaczysz, że to całkiem podstawowe rzeczy, a ja działam na mojej lokalnej maszynie - aby zminimalizować złożoność.

Zachowanie widzę to:

  1. mogę uruchomić serwer.
  2. Serwer rejestruje "Serwer został uruchomiony" na konsolę.
  3. Uruchomę klienta.
  4. Klient rejestruje "Serwer jest gotowy!"
  5. nic się nie dzieje ...

Co Spodziewam się, że serwer log "klient jest gotowy! wiadomość, a następnie treść ("Gotowy otrzymany").

Używam nawet WireSharka do snuffowania linii i wygląda na to, że klient wysyła wiadomość, zgodnie z projektem - ale wywołanie zwrotne na serwerze nie jest uruchamiane.

biegnę węzła v0.8.4 z wyraźnej v3.1.0, socket.io v0.9.13 i socket.io-client v0.9.11 (wszystkie zainstalowane przez KMP).

Oto kod serwera ...

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

A oto kod klienta ...

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

Dokumentacja i przykłady zarówno socket.io i socket.io- klient jest nieco zdezorientowany (by być miłosiernym) i wydaje się, że jest trochę ruchomym celem ... ale z tego, co mogę powiedzieć, myślę, że to powinno zadziałać.

Mam nadzieję, że ktoś może mi doradzić, dokąd zmierzam?

+0

nie jestem pewien co do 'serwerze ready' nazwy zdarzenia .. spróbuj' server_ready' bez przestrzeni ... – udidu

+0

do „serwer gotowe wywołania zwrotne, ponieważ widzę, że serwer jest gotowy! wiadomość na konsoli. Jest to wywołanie zwrotne "comms" na serwerze, które nie uruchamia się. –

+0

Tak, masz rację, teraz znowu widziałem twoje pytanie. Zobacz moją odpowiedź poniżej – udidu

Odpowiedz

4

na serwerze masz ten kod:

io.sockets 
.on('connection', function(socket){ 
     socket.emit('server ready', { msg: 'ready' }) ; 
    }) 

.on('comms', function(content) { 
     console.log('Client is ready!'); 
     console.log(content); 
}); 

Co należy zrobić, to coś takiego:

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

}); 
+0

Spot na! Zepsułem mój zasięg. Dziękuję Ci. –

3

nadzieją to robi mniej więcej to, co potrzebne do zrobienia. Kilka drobnych zmian.

aplikacja.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> 
Powiązane problemy