Вот мой вариант использования по умолчанию: я думаю о том, чтобы обслуживать некоторые из моих ресурсов REST через слой socket.io, а не через http (поскольку мне в конечном итоге нужно обслуживать множество небольших запросов API для отображения типичной страницы, и они re на всем протяжении https, у которого есть дополнительные проблемы с рукопожатием).
Я до сих пор не уверен, что это хорошая идея в целом (и также смотрел на http2.0). В краткосрочной перспективе я не хочу мигрировать с hapijs или переписывать тонну модульного кода, но я нужно попробовать заставить это работать на каком-нибудь тесте сервера, чтобы увидеть, насколько хорошо он работает.
Поэтому я написал супер-базовый обработчик событий socket.io, который просто принимает запросы от эмиттера событий websocket и переупаковывает их в hapi с помощью вызова server.inject
:
module.exports = {
addSocket: function(sock) {
sock.on('rest:get:request', function(sock) {
return function(url) {
console.log(url);
hapi.inject({url: url, credentials: {user: sock.user}}, function(res) {
sock.emit('rest:get:response', url, res.payload);
});
};
})(sock);
}
};
Итак, все, что он на самом деле делает, это удостоверяется, что объект аутентификации настроен (я ранее аутентифицировал пользователя в сокете), а затем вводит запрос GET на сервер.
Обычно кажется, что server.inject
используется для тестирования, но это кажется совершенно беспорядочным планом, если (конечно) он не слишком медленный или плохая идея по причинам, которые я не предвидел. Отсюда: мой вопрос.