【发布时间】:2012-04-17 20:26:44
【问题描述】:
我整个下午都在盯着 node.js 和 socket.io 的例子,我试图拼凑一个简单的页面,告诉我有多少用户连接到服务器。
我已经阅读了http://socket.io/ 的文档以及这里的一些教程/问题,这些教程/问题概述了我正在尝试做的事情。我还发现 create simple node js server and client 对我没有帮助。
版本信息:
node.js - 0.6.15
快递 - 3.0.0alpha1
socket.io - 0.9.5(socket.io-client 是同一版本,但是找不到资源...见 cmets)
ejs - 0.7.1
这是我的服务器代码:
var express = require('express'),
config = {
port: 4000,
hostname: 'localhost'
};
var server = module.exports = express.createServer();
/* server configuration */
server.use(express.cookieParser('keyboard unicorn'));
server.use(express.bodyParser());
server.use(express.methodOverride());
server.use(express.session({ secret: 'keyboard unicorn' }));
server.engine('.html', require('ejs').__express);
server.set('views', __dirname + '/lib/views');
server.set('view options', { layout: false });
server.set('view engine', 'html');
server.use(server.router);
server.use('/', express.static(__dirname + '/lib/assets'));
var io = require('socket.io').listen(server);
var connections = { 'length': 0 };
io.sockets.on('connection', function(socket) {
socket.__fd = socket.fd;
connections[socket.__fd]=socket.remoteAddress;
++connections.length;
console.log('user connected! There are a total of ' + connections.length + ' users online.');
return socket.on('disconnect',function(){
delete conns[socket.__fd];
--connections.length;
console.log('user disconnected! There are a total of ' + connections.length + ' users remaining online.');
});
});
server.get('/', function( req, res ) {
res.render('index', {
'page_title': 'sample application',
'number_of_connections': connections.length
});
});
server.listen(config.port, config.hostname);
这是我的客户端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><%= page_title %></title>
</head>
<body>
<div>There is a total of <%= number_of_connections %> user(s) connected.</div>
<script src="http://cdn.socket.io/stable/socket.io.js"></script>
<script type="text/javascript">
var socket = new io.Socket('localhost',{'port':4000});
socket.connect();
socket.on('connect', function() {
console.log('connected');
});
</script>
</body>
</html>
这是我运行服务器并与客户端连接时发生的情况。
$ node server.js
info - socket.io started
然后,当我在 Web 浏览器上导航到 localhost:4000 时,我会看到带有“0”(number_of_connections)的页面。此外,我在服务器的终端中什么也看不到(on.('connection' 永远不会被命中)。
在客户端上,一两秒后,我开始收到大量错误(如果我让控制台打开几秒钟,页面就会崩溃)见下图:
请提供任何有关从何处开始调试的帮助,我们将不胜感激!我只想启动并运行这个基本示例,这样我就可以开始使用/理解 nodejs 和 socket.io!
【问题讨论】:
-
一个好的起点是你的 node 版本和 socket.io 版本。我在 0.6 中看到了 cdn.socket.io 的版本。例如,我看到我正在使用带有节点 v0.6.4 的 socket.io 0.8.7。另外,您是否有理由不选择
<script src="/socket.io/socket.io.js"></script>?您可以尝试一下,看看结果是否不同(因为这会绕过版本错误的可能性) -
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:4000/socket.io/socket.io.js -
嗯,这很奇怪。当然,我的工作是开箱即用的,所以我对你为什么不能使用本地 socket.io URL 没有太多帮助。顺便说一句,我的 socket.io-client 版本是 0.8.7(与 socket.io 相同)——不知道这是否重要......
-
我的客户端和我的socket-io版本一样
-
对,但是您使用的 cdn.socket.io/stable 是 0.6。我发现一些 cmets 说明了这个旧版本的问题。想知道如何让你的本地加载?