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

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

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

版本信息:

node.js – 0.6.15
expression – 3.0.0alpha1
socket.io – 0.9.5(socket.io客户端是相同的版本,但没有find资源…查看评论)
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 

那么当我浏览到我的网页浏览器上的本地主机:4000我得到'0'(number_of_connections)的页面。 另外,我在服务器的terminal上看不到任何东西(“连接”从来没有命中)。

在客户端,一两秒钟后,我开始得到大量的错误(如果我把控制台打开几秒钟,它会崩溃的页面)看到下面的图片:

在这里输入图像描述

请帮助从哪里开始debugging这将不胜感激! 我只是希望得到这个基本的例子,所以我可以开始玩/理解nodejs和socket.io!

问题是因为Express现在是一个function。

您需要执行以下操作:

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

Express 3.0.0alpha和socket.io不是(直接)兼容的,这是由于2. *和3. *之间的Express变化(或者更确切地说,连接在1. *和2. *之间的变化)。 我build议你暂时降级到Express 2.5.9,或者你可以按照Express的作者TJ Holowaychuk的build议来做。

我build立了一个testing环境,安装了express 3.0和socket.io 0.9.5,并重现你的错误。

然后我跑npm install express@2.5.1根据迁移指南做了一些倒退的调整,运行的很好。

所以我打算继续,并build议socket.io可能不兼容快递3,但仍然看起来相当不稳定。

我的app.js调整了快递2:

 var express = require('express'), config = { port: 8080, hostname: 'localhost' }; var server = module.exports = express.createServer(); /* server configuration */ server.set('views', __dirname + '/lib/views'); server.set('view options', { layout: false }); server.set('view engine', 'ejs'); //server.register('.html', 'ejs');require('ejs').__express); server.use(express.cookieParser('keyboard unicorn')); server.use(express.bodyParser()); server.use(express.methodOverride()); server.use(express.session({ secret: 'keyboard unicorn' })); server.use('/', express.static(__dirname + '/lib/assets')); server.use(server.router); var io = require('socket.io').listen(server); io.set('log level', 2); var connections = { 'length': 0 }; server.get('/', function( req, res ) { res.render('index', { 'page_title': 'sample application', 'number_of_connections': connections.length }); }); 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.listen(config.port); 

我的index.ejs文件:

 <!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 src='/socket.io/socket.io.js'></script> <script type="text/javascript"> var socket = io.connect('http://hostname.com:8080'); socket.on('connect', function() { console.log('connected'); }); </script> </body> </html> 

我希望这里有所帮助。

replaceapp.use(express.bodyParser()); ,与

 app.use(express.json()); app.use(express.urlencoded()); 

…保存文件,重新启动节点服务器。