Node Js 和 websockets
Posted
技术标签:
【中文标题】Node Js 和 websockets【英文标题】:Nodejs & websockets 【发布时间】:2011-03-24 07:25:57 【问题描述】:我正在尝试将数据从我的浏览器 (Chrome) 推送到 nodejs 服务器,但遇到了可怕的麻烦。
基本上,我已经在浏览器中看到了这段代码:
<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');
);
您可以看到我正在尝试记录与控制台的连接,但没有任何显示。我一直在谷歌搜索并尝试通过http://github.com/LearnBoost/Socket.IO-node 的 Socket.IO 示例工作,但似乎没有什么对我有用...
非常感谢任何指针。
编辑: 你好,
我现在有以下服务器代码:
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”事件。我还在套接字对象上发送数据,但服务器上什么也没有出现……完全难住了。现在正在考虑使用 node-websocket-server (http://github.com/miksago/node-websocket-server)。
解决方案:git clone git://github.com/LearnBoost/Socket.IO.git --recursive
使用 --recursive 标志。呵呵!
【问题讨论】:
【参考方案1】:这段代码对我有用:
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();
也许显式端口参数会对您的情况有所帮助?
【讨论】:
嘿,谢谢。我尝试了您提供的代码,但在服务器端控制台上没有收到任何消息;( 您的节点实例是否有足够的权限来打开端口?也许这是示例不起作用的原因。你可以试试 sudo node server.js 另外,你 hello-world 工作吗?访问localhost:8124 - 如果没有“hello world”,那么问题出在应用程序的服务器部分 - 使用基本的 node.js 部署。如果是这样,请先尝试让它在没有 Socket.IO 的情况下运行。还要检查浏览器中的错误控制台:如果其他一些js失败了,那么connect方法可能不会被执行。 socket.io 中也可能缺少某些文件。他们现在在 github 下载中丢失了。尝试执行 git checkout: git clone git://github.com/LearnBoost/Socket.IO.git --recursive 而不是下载 zip 存档。【参考方案2】:这是一个 Chrome 问题:Node.js, WebSocket Location Issue?
【讨论】:
以上是关于Node Js 和 websockets的主要内容,如果未能解决你的问题,请参考以下文章