2013-02-17 103 views
6

我正在研究一個簡單的Node.js雙向客戶端\服務器通信通道,並且我試圖在服務器上使用socket.io套接字。客戶端上的io-clientNode.js socket.io服務器回調無法正常工作

我已經插入了下面的代碼,因爲您會看到它是非常基本的東西,而且我在本地計算機上都運行這兩個代碼 - 以儘量減少複雜性。

我所看到的行爲是:

  1. 我啓動服務器。
  2. 服務器將'服務器啓動'記錄到控制檯。
  3. 我啓動客戶端。
  4. 客戶端日誌'服務器已準備就緒!'
  5. 沒有什麼事情發生...

什麼,我期望是記錄一個服務器的客戶端是準備好了!「消息和內容('已收到')。

我甚至使用WireShark來嗅探線路,它確實顯示客戶端正在按照設計發出消息 - 但服務器上的回調並未觸發。

我跑節點v0.8.4快遞V3.1.0socket.io v0.9.13socket.io客戶端v0.9.11(通過NPM所有已安裝的)。

這裏的服務器代碼...

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

而這裏的客戶端代碼......

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

socket.io和兩個文檔和例子socket.io-客戶端有點困惑(慈善),他們似乎有點移動目標......但從我可以告訴,我認爲這應該工作。

我希望有人可以給我建議,我要去哪裏錯了?

+0

我不知道有關'服務器ready'事件名稱..嘗試'沒有空間server_ready' ... – udidu 2013-02-17 15:47:33

+0

「服務器就緒「回調正在解僱,因爲我看到'服務器已經準備好了!'消息在控制檯上。這是服務器上沒有觸發的'comms'回調。 – 2013-02-17 15:49:04

+0

是啊你是對的,現在我再次看到你的問題..看到我的回答低於 – udidu 2013-02-17 15:54:32

回答

4

在你的服務器,你有這樣的代碼:

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

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

你應該做的是這樣的:

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

現貨!我弄亂了我的範圍。謝謝。 – 2013-02-17 16:04:14

3

希望這是做多還是少了什麼,你需要做的。只是一些小的改變。

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>