Hapi.js + Socket.io在一起

时间:2017-04-05 17:35:52

标签: javascript node.js socket.io hapijs

我想和socket.io一起运行Hapi.js。如果我使用相同的服务器为socket.io和hapi app建立单独的连接,那将是很好的,因为我想在我的套接字中使用Hapi auth cookie

我尝试了一些解决方案,但它们都没有工作,我的服务器崩溃了。我尝试在hapi和我的应用程序启动的同一端口上运行socket.io,但我收到“找不到此localhost页面”错误。我做错了什么?任何帮助将不胜感激

这是我的代码:

const Hapi = require('hapi');
const server = new Hapi.Server();
const Config = require('./config/config.js');
const port = Number(process.env.PORT || 3000);
const io = require("socket.io")(port);

server.connection({
    port: port
});

// my routes are here...

io.on("connection", function (socket) {

    console.log('connected');

    // Do all the socket stuff here.

})

server.start(function(err) {

    if (err) {
        console.error(err);
        throw err;
    }

    console.log('Server started at %s', server.info.uri);

});

2 个答案:

答案 0 :(得分:5)

我只是通过创建两个单独的连接来解决我的问题。现在一切都很好!

以下是我的代码现在的样子:

const Hapi = require('hapi');
const server = new Hapi.Server();
const Config = require('./config/config.js');
const port = Number(process.env.PORT || 3000);

server.connection({ port: port, labels: ['app'] });
server.connection({ port: 8000, labels: ['chat'] });

const app = server.select('app');

app.register([
    // all app's stuff goes here
]);

var io = require('socket.io')(server.select('chat').listener);

io.on("connection", function (socket) {

    console.log('connected');

    // Do all the socket stuff here.

})

server.start(function(err) {

    if (err) {
        console.error(err);
        throw err;
    }

    console.log('Server started');

});

That website给了我很多帮助

答案 1 :(得分:2)

有时您可能只想在您的环境中使用一个端口。您实际上可以在socket.io和http服务器之间共享相同的hapi连接。

Hapi不希望您为多个连接使用相同的端口。 See here about this.如果你这样做,你可能在初始化时没有从Hapi得到任何错误,但你的第二个连接总是会出现404错误。

@ Mattonit针对一个端口方案的代码的微小变化。

const Hapi = require('hapi');
const server = new Hapi.Server();
const Config = require('./config/config.js');
const port = Number(process.env.PORT || 3000);

server.connection({ port: port, labels: ['app'] });

const app = server.select('app');

app.register([
    // all app's stuff goes here
]);

var io = require('socket.io')(app.listener);

io.on("connection", function (socket) {

    console.log('connected');

    // Do all the socket stuff here.

})

server.start(function(err) {

    if (err) {
        console.error(err);
        throw err;
    }

    console.log('Server started');

});
相关问题