2010-08-02 32 views
10

我試圖將數據從我的瀏覽器(Chrome)推送到nodejs服務器,我遇到了很大的麻煩。Nodejs&websockets

基本上,我有這個代碼出現在瀏覽器:

<script src="./Socket.IO/socket.io.js"></script> 
<script> 
     io.setPath('./Socket.IO/'); 

     var socket=new io.Socket('xxx.xxx.xxx.xxx'); 

     socket.on('connect',function(){ 
       alert('connect');  
     }); 
     socket.on('message',function(msg){ 
       alert('message'+msg); 
     }); 
     socket.on('close',function(){ 
       alert('close'); 
     }); 
     socket.on('disconnect',function(){ 
       alert('disconnect'); 
     }); 
     socket.connect(); 

</script> 

說的顯現的唯一警告是「關閉」警報。

這裏是我的服務器代碼:

var http=require('http'); 
var io=require('./Socket.IO-node'); 

var server=http.createServer(function(req, res){ 
    // your normal server code 
    res.writeHeader(200, {'Content-Type': 'text/html'}); 
    res.writeBody('<h1>Hello world</h1>'); 
    res.finish(); 
}); 

var socket=io.listen(server,{transports:websocket,port:8080}); 

socket.on('connection',function(client){ 
     console.log('connection'); 
}); 

你可以看到,我試圖登錄到控制檯的連接,卻遲遲沒有出現。我一直在谷歌搜索和試圖通過Socket.IO示例在http://github.com/LearnBoost/Socket.IO-node,並沒有什麼似乎爲我工作...

任何指針是非常感謝。

編輯: 嗨,

我必須得下面的服務器代碼:

var http=require('http'); 
var io=require('./Socket.IO-node'); 

var server=http.createServer(function(req, res){ 
     //your normal server code 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.write('Hello world'); 
     res.end(); 
}); 

server.listen(8124); 
server=io.listen(server); 
server.on('connection', function(client){ 
     console.log('EOH connected'); 
     sys.log('EOH connected'); 
}); 
server.on('clientConnect',function(client){ 
     console.log('EOH connected'); 
     sys.log('EOH connected'); 
}); 
server.on('clientDisconnect',function(client){ 
     console.log('EOH disconnected'); 
     sys.log('EOH disconnected'); 
}); 

而下面的客戶端代碼:

<script> 
window.onload=function(){ 
io.setPath('./Socket.IO/'); 
socket = new io.Socket('localhost', {'port': 8124}); 
socket.connect(); 
socket.send('xxx'); 
} 
</script> 

當我在加載客戶端代碼localhost:8124,我希望某種'clientConnect'事件被解僱。我也在socket對象上發送數據,服務器上沒有任何東西出現......完全難住。現在查看使用node-websocket-server(http://github.com/miksago/node-websocket-server)。

解決方案:混帳混帳克隆://github.com/LearnBoost/Socket.IO.git --recursive

使用--recursive標誌。衛生署!

回答

0

此代碼的工作對我來說:

var server = http.createServer(...);  

server.listen(8124); 
server = io.listen(server); 
server.on('connection', function(client){ 
    sys.log('client connected'); 
}); 

,然後在客戶端:

io.setPath('/media/js/Socket.IO/'); 
socket = new io.Socket('localhost', {'port': 8124}); 
socket.connect(); 

也許是明確的端口參數將在你的情況下幫助嗎?

+0

嘿,謝謝你。我想你給的代碼,我沒有收到服務器端的控制檯上的任何消息;( – Eamorr 2010-08-02 19:02:33

+0

做你的節點實例有足夠的權限打開的端口也許這是有原因的例子不工作,你可以試試? sudo node server.js 此外,你是世界上的工作嗎?訪問http:// localhost:8124/- 如果沒有'你好世界',那麼問題是與你的應用程序的服務器部分 - 基本節點。.js文件部署如果是這樣試試先得到它沒有Socket.IO運行 同時檢查錯誤控制檯瀏覽器:如果其他一些JS失敗,那麼可能無法執行的連接方法 – 2010-08-02 20:18:26

+2

這也有可能是某些文件丟失。來自socket.io。他們現在在github下載中不見了。嘗試做git checkout: git clone git://github.com/LearnBoost/Socket.IO.git --recursive 而不是下載zip壓縮文件。 – 2010-08-02 20:19:54