【问题标题】:hapijs with socket.io the right way?hapijs 与 socket.io 的正确方式?
【发布时间】:2017-09-22 18:55:30
【问题描述】:

我正在尝试将 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 的方式,请纠正我。

【问题讨论】:

  • 我应该使用nes而不是socket.io吗?

标签: node.js sockets socket.io hapijs


【解决方案1】:

你离它很近。 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')

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

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 2018-05-18
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多