nodejs socket.io无法连接到服务器?

rle*_*mon 13 node.js socket.io

我整个下午一直盯着node.js和socket.io示例,我正在尝试拼凑一个简单的页面,告诉我有多少用户连接到服务器.

我已经阅读了http://socket.io/上的文档以及这里的一些教程/问题,这些教程/问题概述了我正在尝试做的事情.我也发现创建简单的节点js服务器和客户端,这对我没有帮助.

版本信息:

node.js - 0.6.15
express - 3.0.0alpha1
socket.io - 0.9.5(socket.io-client是相同版本,但是找不到资源...请参阅注释)
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);
Run Code Online (Sandbox Code Playgroud)

这是我的客户端代码:

<!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>
Run Code Online (Sandbox Code Playgroud)

以下是我运行服务器并与客户端连接时发生的情况.

$ node server.js
   info  - socket.io started
Run Code Online (Sandbox Code Playgroud)

然后当我在我的网络浏览器上导航到localhost:4000时,我得到的页面为'0'(number_of_connections).此外,我在服务器的终端中看不到任何内容(打开.('连接'永远不会被命中).

在客户端上,经过一两秒钟后,我开始收到大量错误(如果我让控制台打开几秒钟会导致页面崩溃)请参见下图:

在此输入图像描述

请,任何有关从哪里开始调试的帮助将不胜感激!我只是想让这个基本的例子运行起来,所以我可以开始玩/了解nodejs和socket.io!

Men*_*ual 17

问题是因为Express现在是一个功能.

您需要执行以下操作:

var express = require('express');
var app = express();
var server = app.listen(3000);

var io = require('socket.io').listen(server);
Run Code Online (Sandbox Code Playgroud)


Lin*_*iel 5

Express 3.0.0alpha和socket.io不是(直接)兼容的,因为Express*在2.*和3.*之间的变化(或者更确切地说,在1.*和2.*之间的连接中的变化).我会建议您降级到2.5.9快递为暂时的,也可以按照这个建议从快车的作者,TJ Holowaychuk.