繁体   English   中英

Node.js + Express.js + Socket.io

[英]Node.js + Express.js + Socket.io

无论如何都不起作用,我确实尝试了许多不同的方法,但是没有任何效果。我想与socket.io建立实时连接,以监控redis数据库,以获取列表中所有新添加的项。 有任何想法吗 ?

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。

我不知道这是不是。 这只是预感。 app.js您告诉Express应用程序监听app对象中分配的端口:

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

但是,当您创建iorequire在该对象的listen方法内再次调用app.listen()require返回。

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

我的预感是,也许您是在强迫app服务器监听两次,这可能是导致问题的原因,而这又只是一次预感。 如果我错了,请告诉我。 如果您确实想在端口3111上侦听,则可以尝试以下操作:

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

看看是否能带您到任何地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM