带Socket.io的Hapi.js – socket.io.js在哪里?

我试图将socket.io挂接到Hapi.js服务器。 我已经testing了在vanilla Node.js中的socket.io实现,一切都很好。 Hapi实现的服务器端似乎工作正常,但“/socket.io/socket.io.js”资源没有被提供给客户端。

我已经检查了Hapi的例子 ,但是他们只能说明在服务器上要做什么,而且他们在客户端握手的文档似乎很奇怪:他们在8000端口上有一个服务器,但是说要发送socket.io握手到8080–我甚至尝试过(这似乎wonky和每个其他socket.io实现不一致),没有运气。

谢谢!

Hapi 8引入了一些新的复杂性,所以如果任何人重新审视这个问题…

在客户端上,您不必使用/socket.io/socket.io.js ,而是使用

  1. 一个cdn( https://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js
  2. 或更具体地提供文件( http://yoursite.io/js/socket.io/socket.io.js
  3. 更好的是,使用像npm / browserify和( https://www.npmjs.com/package/socket.io-client ):

    var socket = require('socket.io-client')('http://localhost:8080');

你select包括上面的客户端代码的方式

Hapi 8将允许你在你的服务器上做一些很酷的事情,就像这样聊天:

server.js

 server.connection({ port: 8000, labels: 'app' }); server.connection({ port: 8080, labels: 'chat' }); server.register({ register: require('./server/plugins/socketIO') }, function(err) { if (err) throw err; }); 

/plugins/socketIO/index.js

 exports.register = function(server, options, next) { var io = require('socket.io').listen(server.select('chat').listener,{log:false}); io.sockets.on('connection', function (socket) { socket.on('someAction', function(name, cb) { ... }); ... }); } 

答案:从CDN加载客户端脚本

为了回答您的具体问题:我们决定从CDN加载socket.io.js脚本(例如: http : //cdnjs.com/libraries/socket.io ),以加快我们的应用程序加载速度。 请参阅: index.html#L23

脱机工作 …? ( 或者不想使用CDN?

如果加载客户端脚本表单CDN不是一个选项,因为您正在拨号或脱机工作,则使用惰性并将文件公开到您的应用程序。 例如:

 var Hapi = require('hapi'); var server = new Hapi.Server(); server.connection({ host: '0.0.0.0', port: Number(process.env.PORT || 3000) }); // uses https://github.com/hapijs/inert to serve static files server.register(require('inert'), function () { server.route([ { method: 'GET', path: '/', handler: { file: "index.html" } }, { method: 'GET', path: '/socket.io.js', handler: { file: './node_modules/socket.io-client/socket.io.js' } ]); server.start(function () { console.log('Visit: http://127.0.0.1:'+server.info.port); }); }); module.exports = server; 

客户端文件位于: your_project / node_modules / socket.io-client / socket.io.js

最新的解决scheme/示例与端到端的testing

如果您仍然在寻找如何Hapi.js应用程序中 使用Socket.io示例 ,我们创build了一个完整的示例 (包含文档/注释和端到端testing)。

请参阅: https : //github.com/dwyl/hapi-socketio-redis-chat-example

构建状态 测试覆盖由codecov.io 守则气候 依赖状态 devDependency状态 它与最新版本的Hapi&Socket.io保持同步,并使用Redis Pub-Sub来保存和分发聊天消息。

您可以尝试将socket.io.js文件从node.js目录复制到一个众所周知的目录中。

我会首先确认你没有任何防火墙问题干扰请求的服务。

如果防火墙不负责阻止请求,请确保JavaScript文件的src指向的是同一个服务器和端口号,如Hapi.createServer行所示,您已经configuration。

如果请求到达服务器,它将在terminal中输出一个debugging行,指示它为该文件提供服务。