socket.io不工作node.js

时间:2015-05-20 05:12:40

标签: node.js express socket.io

我无法在node.js中运行socket.io代码,在运行代码时,console.log()也没有显示。以下是代码。

app.js

var express = require('express');
var http = require('http');
var app = express();
app.set('port', process.env.PORT || 3000);
app.post('/testStream',test.testStream);
var server = http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

module.exports.appServer = server;

我创建了一个test.js文件,我正在访问这个导出的变量appServer。

var server = require('../app.js');

exports.testStream = function(req,res){        
    var io = require('socket.io').listen(server.appServer);
    io.on('connection',function(socket){
        console.log("in socket");
        fs.readFile('E:/temp/testimg.png',function(err,buf){
            socket.emit('image',{image: true,buffer: buf});
            console.log("test image");
        });
    })       
}

当代码运行时,它会卡住而不显示console.logs()。我在这里做错了什么。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我建议遵循socket.io docs中建议的代码结构。

此外,您应该io.listen快速中间件中调用io.on('connection')testStream。这些是你应该只做一次的事情,理想情况下它们应该在启动期间发生,在app.js内部而不是对POST请求的反应。事实上,我不确定您的testStream中间件的用途是什么,它甚至没有返回任何响应(例如res.end()

如果您想在单独的模块中处理套接字连接,您可以尝试将server实例作为变量传递给您,而不是按照您的方式导出应用程序io。子模块。简而言之,试试这个:

<强> app.js

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var test = require('./test')(io);

app.set('port', process.env.PORT || 3000);

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

<强> test.js

module.exports = function(io) {
    io.on('connection', function(socket) {
        console.log("in socket");
        fs.readFile('E:/temp/testimg.png', function(err, buf) {
            socket.emit('image', {
                image: true,
                buffer: buf
            });
            console.log("test image");
        });
    });
};