2010-08-02 30 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