2011-06-27 59 views
1

這是我的代碼的NodeJS:有什麼問題我簡單的NodeJS代碼

var io = require('socket.io').listen(8011); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

和客戶端HTML是:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

當我使用節點a.js運行它,我得到的以下錯誤:

node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
TypeError: Object 8011 has no method 'listeners' 
    at new <anonymous> (/home/zjm1126/node_modules/socket.io/lib/socket.io/listener.js:29:31) 
    at Object.listen (/home/zjm1126/node_modules/socket.io/lib/socket.io/index.js:11:10) 
    at Object.<anonymous> (/home/zjm1126/桌面/app/a.js:1:93) 
    at Module._compile (module.js:407:26) 
    at Object..js (module.js:413:10) 
    at Module.load (module.js:339:31) 
    at Function._load (module.js:298:12) 
    at Array.<anonymous> (module.js:426:10) 
    at EventEmitter._tickCallback (node.js:126:26) 

但這是http://socket.io/演示代碼,爲什麼會出現這個錯誤?

更新:

當我運行npm update socket.io,在服務器端運行

,但客戶端給出了這樣的錯誤:

io is not defined 
var socket = io.connect('http://localhost:8011'); 

有什麼不對呢?

+3

你使用的是socket.io 0.7或socket.io 0.6嗎?使用'npm update socket.io'來更新到最新版本。 – Raynos

+0

非常感謝~~ – zjm1126

+0

嗨@Raynos,看看更新。 – zjm1126

回答

0

您在下面指定的代碼是用於socket.io 0.7.x(API),而不是用於0.6.x,因此這是錯誤可能出現的位置。您應該嘗試npm update socket.io。而且您使用的socket.io客戶端HTML代碼相同的node.js服務器或從其他服務器(PHP或東西例如)

[email protected]:~/node/socketio-demo$ npm ls 
/home/alfred/node/socketio-demo 
└─┬ [email protected] 
    ├── [email protected] 
    └── [email protected] 

:我的依賴關係將根據npm ls以下。


我也通過PHP做的試驗:

mkdir socketio-demo` 
cd socketio-demo` 
gedit server.js # my quick/dirty editor 

var io = require('socket.io').listen(8011); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

[email protected]:~/node/socketio-demo$ node server.js 
    info - socket.io started 

我也有一個PHP服務器上的端口80上運行:

gedit socket.php 

<script src="http://localhost:8011/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8011/'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

當另一臺主機上,你需要更新<script src="http://localhost:8011/socket.io/socket.io.js"></script>指向您socket.io服務器

var socket = io.connect('http://localhost:8011/');指向您socket.io服務器。使用這個設置,我可以在沒有任何問題的情況下工作。

0

ZJM - 我有一個相同的構建你的(試圖讓它開箱即用)。我得到了一個不同的錯誤(socket.js文件正在被服務和記錄,但沒有連接發生)。我認爲(90%肯定 - 似乎也有一些緩存問題),在客戶端,提供沒有參數的socket.io解決了問題。

不知道這是否會幫助你,但希望它