2017-04-05 59 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'); 

});