Я написал сервер веб-сокета, используя socket.io, node-http2 и express в Node.js. Сервер работает по назначению, за исключением того факта, что согласно запросу DevTools от DevTools socket.io запросы HTTP проходят через HTTP/1.1 (см. Ниже). Столбец «Протокол» должен показывать h2
, если запрос был отправлен с использованием протокола HTTP/2.Получение socket.io, express & node-http2 для связи, хотя HTTP/2
Это происходит только в Chrome, другие браузеры используют правильный протокол.
Серверный код (сокращенный):
var PORT = 8667,
config = require('./config'),
socketioServer = require('socket.io'),
app = express(),
https = require('http2'),
cors = require('cors');
app.use(cors(function(req, callback){
var corsOptions = { origin: false };
if (/^https:\/\/mlpvc-rr\.lc/.test(req.header('Origin')))
corsOptions.origin = true;
callback(null, corsOptions);
}));
app.get('/', function (req, res) {
res.sendStatus(403);
});
var server = https.createServer({
cert: fs.readFileSync(config.SSL_CERT),
key: fs.readFileSync(config.SSL_KEY),
}, app);
server.listen(PORT);
var io = socketioServer.listen(server);
// ...
код подключения браузера:
var conn = io('https://ws.'+location.hostname+':8667/', { reconnectionDelay: 5000 });
conn.on('connect', function(){
console.log('[WS] Connected');
});
conn.on('disconnect',function(){
console.log('[WS] Disconnected');
});
Выход testssl.sh:
Что мне нужно изменить, чтобы сделать запросы socket.io через HTTP/2?
Hi. Можете ли вы получить мне полный пример? Я хотел бы поближе рассмотреть его. На первый взгляд кажется, что это связано с websockets (который использует socket.io и который не поддерживается HTTP/2), но запросы, которые вы показываете *, кажутся * обычными Ajax ... – dsign
@dsign Сервер с открытым исходным кодом на https://github.com/ponydevs/MLPVC-WS – SeinopSys
Какую библиотеку SSL вы используете (openssl?), а какая версия поддерживает ALPN? https://ma.ttias.be/day-google-chrome-disables-http2-nearly-everyone-may-31st-2016/ –