Конечные точки socket.io, откуда они берутся? - PullRequest
0 голосов
/ 14 июля 2020

В моем очень простом nodejs серверном приложении. Я обслуживаю socket.io (v2.2.0) без express или http. Вот мой код.

const io = require('socket.io')();
io.on('connection', (client) => { 
    client.emit("welcome", "hello user");
 });
io.listen(3000);

(через поиск в Google) Я обнаружил, что могу в своем веб-браузере перейти как к http://localhost: 3000 / socket.io /, так и к http://localhost: 3000 /socket.io/socket.io.js Откуда эти «конечные точки» определены? В моем коде ничего не говорится об этих «конечных точках», но они все же существуют. Это остатки от прошлых версий?

Когда я go - http://localhost: 3000 / socket.io / я получаю неверный запрос 400 с ответным сообщением JSON

{"code":0,"message":"Transport unknown"}

и когда я go до http://localhost: 3000 / socket.io / socket.io. js я получаю это

!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function n(t,e){"object"===("undefined"==typeof t?"undefined":i(t))&&(e=t,t=void 0),e=e||{};var r,n=s(t),a=n.source,p=n.id,f=n.path,l=h[p]&&f in h[p].nsps,d=e.forceNew||e["force new connection"]||!1===e.multiplex||l;return d?(u("ignoring socket cache for %s",a),r=c(a,e)):(h[p]||(u("new io instance for %s",a),h[p]=c(a,e)),r=h[p]),n.query&&!e.query?e.query=n.query:e&&"object"===i(e.query)&&(e.query=o(e.query)),r.socket(n.path,e)}function o(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(encodeURIComponent(r)+"="+encodeURIComponent(t[r]));return e.join("&")}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof 
and so on

1 Ответ

1 голос
/ 15 июля 2020

socket.io основан на транспорте webSocket. И транспорт webSocket запускает каждое соединение с HTTP-запросом (с определенными наборами заголовков, которые указывают, что это запрос на соединение с webSocket). Таким образом, когда вы выполняете io.listen(), он создает webServer.

Затем, для поддержки некоторых других вещей socket.io (таких как получение клиентской библиотеки socket.io и установление новых соединений), он также создает маршруты на основе префикса пути /socket.io, например /socket.io и /socket.io/socket.io.js.

Где эти «конечные точки» определены из?

Они являются частью внутренняя работа socket.io.

Это остатки от прошлых версий?

Нет, они все еще работают так, как socket.io.

Когда я go - http://localhost:3000/socket.io/, я получаю 400 неверных запросов

Этот маршрут используется для новых подключений socket.io, и для его выполнения требуются различные параметры запроса и пользовательские заголовки. должным образом, и именно поэтому вы получаете неверный запрос.

Например, вот снимок экрана с запросом на запуск нового соединения socket.io с использованием маршрута /socket.io. Вы можете видеть как параметры запроса, так и настраиваемые заголовки, которые являются частью настройки транспорта webSocket и соединения socket.io поверх этого транспорта.

введите описание изображения здесь

...