2014-03-26 69 views
3

我正在使用NodeJS和socket.io(和Express)設置一個簡單的項目。我app.js的樣子:NodeJS + socket.io:服務器沒有收到發出的消息

var express = require("express"); 
var app = express(); 
var port = 8003; 
var __root = '/voidwalker/'; 
console.log('Listening on port: ' + port); 

// Settings // 
app.set('views', __dirname + '/tpl'); 
app.set('view engine', "jade"); 
app.engine('jade', require('jade').__express); 
app.use(__root, express.static(__dirname + '/public')); 

// Pages // 
app.get(__root, function(req, res) { 
    res.render('voidwalker'); 
}); 

// Socket.io // 
var io = require('socket.io').listen(app.listen(port)); 
io.sockets.on('connection', function (socket) { 
    socket.emit('message', {message: 'Welcome to the chat!'}); 
    socket.on('send', function(data) { 
     console.log('TEST', data); 
     io.sockets.emit('message', data); 
    }); 
}); 

而且我的客戶端JS的樣子:

window.onload = function() { 
    var socket = io.connect('http://node.domain.com:8003/voidwalker/'); 
    if (settings.debug) console.debug('Loaded socket.io', socket); 

    socket.on('message', function (data) { 
     console.log('data recieved') 
     console.log(data); 
    }); 

    console.log(socket.emit('send', {'test': 'io.sockets.emit'})); 
} 

但它似乎並沒有在所有的工作。這是我的日誌的單一客戶端後,副本連接:

[[email protected] ~]$ node /var/www/node/apps/voidwalker/app.js 
Listening on port: 8003 
    info - socket.io started 
    debug - client authorized 
    info - handshake authorized 4F7Zocz71RaQv7w5WOVg 
    debug - setting request GET /socket.io/1/websocket/4F7Zocz71RaQv7w5WOVg 
    debug - set heartbeat interval for client 4F7Zocz71RaQv7w5WOVg 
    debug - client authorized for 
    debug - websocket writing 1:: 
    debug - websocket writing 5:::{"name":"message","args":[{"message":"Welcome to the chat!"}]} 

我的開發者控制檯,返回此:

Loaded socket.io: SocketNamespace {socket: Socket, name: "/voidwalker/", flags: Object, json: Flag, ackPackets: 0…} 

我期待看到我的CLI的console.log('TEST', data);返回值時,客戶端連接,但它永遠不會出現。

+0

瀏覽器控制檯中是否有任何錯誤消息?瀏覽器中的調試輸出是什麼?您已經添加了一些語句來跟蹤瀏覽器端發生了什麼,因此請與我們分享。 – GhostGambler

+0

我添加了我的開發者控制檯的內容;)沒有錯誤消息。 –

回答

1

你肯定

var socket = io.connect('http://node.domain.com:8003/voidwalker/'); 

僅僅因爲你綁定了一些中間件到這個路徑,我不希望socket.io在那裏也聽。其實它的default endpoint is /socket.io(請參閱endpoint選項),它不適合您嘗試連接到的端點。我會給

var socket = io.connect('http://node.domain.com:8003/'); 

一試。客戶端使用socket.io as default endpoint,所以這應該合在一起。

+1

它似乎工作!問題是,整個項目位於我的根目錄('/ voidwalker')的子目錄中,所以我想我必須指定它。 –

相關問題