У меня запущены клиент и сервер бот-сокета.Я хочу, чтобы клиент связывался с сервером.
Инициализация сервера
this.http_server = net.createServer();
// this didn't work too. Exxentially socket io does not work at all
// this.io = io.listen(typeof port == "number" ? port : process.env.PORT);
console.log("[ManagementServer] Attaching socket IO to HTTP server.");
this.io = io(this.http_server);
/// The port does open
this.http_server.listen(typeof port == "number" ? port : process.env.PORT,
() => {
console.log('[ManagementServer] IO HTTP server listening on port', this.http_server.address().port)
});
/// The connection listener is triggered, but IO doesn't bother
/// replying or something
this.http_server.on("connection", (req, res) => {
console.log("[ManagementServer] Connection received, but IO ignores it.")
});
// Never happens
this.io.on("connection", (socket) => {
this.connection(socket);
})
Инициализация клиента
const srvurl = "http://" + this.remoteAddr + ":" + this.remotePort;
console.log("[UDP_socketio] Connecting to server: ", srvurl)
this.client = socketioclient(srvurl);
this.client.once("connect", () => {
console.log("[UDP_socketio] Connected to remote server, identificating.")
this.sendIdentification();
});
this.client.on("error", () => {
console.error("[UDP_socketio] Socket IO connection error.")
});
Выходные данные отладки сокета IO
Я включил отладку, но вывод отладки ввода-вывода сокета в любом случае не очень полезен:
[ManagementServer] Attaching socket IO to HTTP server.
socket.io:server initializing namespace / +0ms
socket.io-parser encoding packet {"type":0,"nsp":"/"} +0ms
socket.io-parser encoded {"type":0,"nsp":"/"} as 0 +1ms
socket.io:server creating engine.io instance with opts {"serveClient":false,"path":"/","initialPacket":["0"]} +3ms
[ManagementServer] IO HTTP server listening on port 80
[UDP_socketio] Connecting to server: http://127.0.0.1:80
socket.io-client:url parse http://127.0.0.1:80 +0ms
socket.io-client new io instance for http://127.0.0.1:80 +0ms
socket.io-client:manager readyState closed +0ms
socket.io-client:manager opening http://127.0.0.1:80 +1ms
engine.io-client:socket creating transport "polling" +0ms
engine.io-client:polling polling +0ms
engine.io-client:polling-xhr xhr poll +0ms
engine.io-client:polling-xhr xhr open GET: http://127.0.0.1/?EIO=3&transport=polling&t=MEuBb8c&b64=1 +1ms
engine.io-client:polling-xhr xhr data null +0ms
engine.io-client:socket setting transport polling +10ms
socket.io-client:manager connect attempt will timeout after 20000 +12ms
socket.io-client:manager readyState opening +1ms
[ManagementServer] Connection received, but IO ignores it.
socket.io-client:manager connect attempt timed out after 20000 +20s
engine.io-client:socket socket close with reason: "forced close" +20s
engine.io-client:polling transport not open - deferring close +20s
engine.io-client:socket socket closing - telling transport to close +0ms
socket.io-client:manager connect_error +2ms
socket.io-client:manager cleanup +0ms
socket.io-client:manager will wait 1178ms before reconnect attempt +1ms
socket.io-client:manager attempting reconnect +1s
socket.io-client:manager readyState closed +0ms
socket.io-client:manager opening http://127.0.0.1:80 +1ms
Обратите внимание, что прослушиватель для соединения, которое я добавил, запускает, но ввод-вывод сокета ничего не делает.
Что до сих пор не помогло:
- Удаление прослушивателя
connection
из this.http_server
- Изменение порта, используемого для тестирования
- Увеличение задержки, после которой клиент пытается подключиться
- Чтение документации по socket.io.Это сбивает с толку, неполное, неточное и непоследовательное.
Что может заставить сокет IO игнорировать все подобные подключения?Может быть, сервер прослушивает запрос с разных путей?Если это так, как проверить, по какому пути прослушивается ввод-вывод?