2014-02-20 86 views
0

无论如何,我真的尝试了很多不同的方式,但没有任何作品。 我想与socket.io建立一个实时连接来监视一个redis数据库来获取列表中的每个新增项目。 任何想法?Node.js + Express.js + Socket.io

app.js

/** 
* Module dependencies. 
*/ 

var express = require('express'); 
var http = require('http'); 
var path = require('path'); 
var crawler = require('crawler.js'); 


var app = express(); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

// development only 
if ('development' == app.get('env')) { 
//app.use(express.errorHandler()); 
} 
app.get('/rootaccess',function(req, res){ 
res.render('crawlercontrol'); 
}); 
app.get('/crawler/monitor',function(req, res){ 
res.render('monitor'); 
}); 
app.get('/crawler/start',function(req,res){ 
crawler.start(res); 
}); 

app.get('/crawler/stop',function(req,res){ 
crawler.stop(res); 
}); 


http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

var io = require('socket.io').listen(app.listen(3111)); 

io.sockets.on('connection', function (socket) { 
    console.log('hei socket.io'); 
    socket.emit('message', { message: 'welcome to the chat' }); 
    socket.on('send', function (data) { 
     io.sockets.emit('message', data); 
    }); 
}); 

的index.html

<!DOCTYPE html> 
<html> 
    <head> 
     <title>ROOT Monitor</title> 
     <link rel="stylesheet" href="/css/normalize.css"> 
     <link rel="stylesheet" href="/css/foundation.css" /> 
    <link rel="stylesheet" href="/css/font-awesome.min.css"> 
    <script src="/js/libs/modernizr.js"></script> 
    </head> 
<body> 
<div id="monitor"> 
    Monitor 
</div> 
</body> 
<script src="/js/libs/jquery-1.10.2.js"></script> 
<script src="/js/libs/foundation.min.js"></script> 
<script src='/socket.io/socket.io.js' /> 
<script> 
    var socket = io.connect('http://localhost:3111'); 
    socket.on('news', function (data) { 
    console.log(data); 
    }); 
</script> 
</script> 
</html> 

此时出现的是,socket.io没有为客户提供socket.io.js唯一的错误..

+0

你从哪里得到这个错误? –

回答

0

我不知道这是否与否;这只是一种预感。在app.js你告诉快递应用到指定的端口上侦听的app对象:

http.createServer(app).listen(app.get('port'), ... 

但是当你创建io,你又对象require回报的listen方法中调用app.listen()

var io = require('socket.io').listen(app.listen(3111)); 

我的直觉是,也许你正迫使app服务器侦听这可能引起问题,再次只是一个预感两次。如果我错了告诉我。如果你真的想收听3111端口,你可以试试这个:

var io = require('socket.io').listen(3111); 

看看你是否能得到你的任何地方。