gpt4 book ai didi

node.js - hapijs 与 socket.io 的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:22 25 4
gpt4 key购买 nike

我正在尝试将 hapijs 与 socket.io 一起使用,并且已经搜索了很多有关如何以正确的方式将 socket.io 集成到 hapi 服务器中的信息。我发现一种方法是 example我仍然不确定这是否是正确的选择。我必须承认我是 hapijs 的新手,而且我还在学习中:)

var Path = require('path');
var Hapi = require('hapi');
var socketio = require('socket.io');
var server = new Hapi.Server();
server.connection({port: 3000});

server.register(require('vision'), function (err) {
server.views({
engines: {
ejs: require('ejs')
},
relativeTo: __dirname,
path: 'templates'
});
});

var plugins = [
{register: require('./lib/index.js')}
];

server.register(plugins, function (err) {
server.start(function () {
io = socketio.listen(server.listener);

io.on('connection', function (socket) {
socket.on('create', function (room) {
socket.join(room);
console.log("Joined room: " + room);
socket.emit('message', "Joined room");
});
});
console.log('Server running at:', server.info.uri);
});
});

还有lib/index.js

exports.register = function(server, options, next) {
var tasks = [];

server.route([
{
method: 'GET',
path: '/tasks',
handler: function (request, reply) {
reply.view('index', { sid: "6001" });
io.emit('message', "Test");
}
},
{
method: 'POST',
path: '/tasks/{name}',
handler: function (request, reply) {
reply.view('index', { sid: "6001" });
io.emit('message', "Test");
}
},
{
method: 'POST',
path: '/tasks',
handler: function (request, reply) {
io.emit('message', "Test");
}
}
]);

next();
}

exports.register.attributes = {
name: 'routes-tasks',
version: '1.0.0'
};

如果这不是 hapijs 的使用方式,请纠正我。

最佳答案

你离它很近了。1)断开连接时关闭套接字

socket.disconnect('unauthorized'); or socket.close();

2)对每个订阅使用身份验证

{
method: 'POST',
path: '/tasks/{name}',
auth: auth,
handler: function (request, reply) {
reply.view('index', { sid: "6001" });
io.emit('message', "Test");
}
},

3)必须重要的是使用 Access-Control-Allow-Origin 否则会发生 websocket 劫持。

request.response.header('Access-Control-Allow-Origin', 'your domain')

如果您需要更多信息,请告诉我。我很乐意提供帮助

关于node.js - hapijs 与 socket.io 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33738258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com