2017-04-05 33 views
0

我想运行Hapi.js与socket.io一起。这将是非常好的,如果我有单独的连接socket.io和hapi应用程序使用相同的服务器,因为我想在我的插座中使用Hapi身份验证cookieHapi.js + Socket.io在一起

我尝试了一些解决方案,但他们都不工作,我的服务器是崩溃。我试图在hapi和我的应用程序启动时在相同的端口上运行socket.io,但我得到了“This localhost page can not be found”错误。我做错了什么?任何帮助将不胜感激

这里是我的代码:

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

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

这里是我的代码现在的样子:

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帮了我很多

+0

感谢您发布您的解决方案! –

1

你可能只是想用你的环境的一个端口的一些倍。你实际上可以在socket.io和http服务器之间共享相同的hapi连接。

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

来自@Montonit的一个端口场景代码的小改动。

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'); 

});