node.js - 基本 Express 和 socket.io 连接问题
问题描述
使用基本的快速设置我无法访问 io.on('connect') 回调。连接只是停滞不前
节点 12.14.1 express 4.17.1 socket.io 3.0.1
代码
import express, { ErrorRequestHandler } from 'express';
import path from 'path';
import {Server} from 'socket.io';
import http from 'http';
import cors from 'cors';
import createError from 'http-errors';
import defaultRouter from './routes';
const app = express();
app.use(cors({origin:'*'}));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname ,'../public')))
app.get("/",(req,res)=>{return res.sendFile(path.join(__dirname,'public','index.html')) })
app.use(defaultRouter);
app.use((req, res, next) => {
const { url } = req;
const message = `Page not found ${url}`;
next(new createError.NotFound(message));
});
const DefaultErrorHandler: ErrorRequestHandler = (err, req, res, next) => {
if (err && err.statusCode) {
return res.status(err.statusCode).send(err);
}
res.status(500).send('Yeah...my bad');
};
app.use(DefaultErrorHandler);
app.listen(3000, () => {
console.log('App listening on port 3000');
});
const server = require('http').createServer(app);
const io = require('socket.io')(server);
io.on('connection', function (socket:any) {
console.log("connected")
io.emit("user connected")
socket.on('disconnect',()=>{console.log('disconnected')})
});
io.use((socket:any, next: any)=>{console.log(socket.request); next()})
server.listen(3001 )
server.on("listening",()=>{console.log('ws listening on 3001')} )
server.on("error",()=>{console.log('error')} )
网络套接字调用
$ websocat ws://localhost:3001/socket.io/?EIO=3\&transport=websocket
>0{"sid":"Q9Jj3CNtm6MSarmEAAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}
>2
调试
engine handshaking client "Q9Jj3CNtm6MSarmEAAAA" +0ms
engine:socket sending packet "open" ({"sid":"Q9Jj3CNtm6MSarmEAAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +0ms
engine:socket flushing buffer to transport +0ms
engine:ws writing "0{"sid":"Q9Jj3CNtm6MSarmEAAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +0ms
engine:transport setting request +0ms
socket.io:server incoming connection with id Q9Jj3CNtm6MSarmEAAAA +4s
engine:socket writing ping packet - expecting pong within 5000ms +25s
engine:socket sending packet "ping" (undefined) +1ms
engine:socket flushing buffer to transport +0ms
engine:ws writing "2" +25s
engine:ws closing +5s
socket.io:client client close with reason ping timeout +0ms
socket.io:client no namespace joined yet, close the client +15s
使用 firecamp 时,它会连续连接和断开连接,并且不会与轮询传输连接
我不确定这些连接发生了什么,我尽可能简单地将其分解并得到相同的结果,旁注,我没有在 firecamp 上收到 pong 通知。我把它分解到最小并且从未达到“连接”块
解决方案
推荐阅读
- c++ - Qt + Ogre3D。我无法构建一个非常简单的示例
- cmd - 创建一个 cmd 脚本以将 bitlocker 数字 id 保存到广告
- java - 从数据库表中读取 Anylogic 计划异常
- r - R 中的 hw() 函数仅在我的笔记本电脑上无法正常工作
- facebook-php-sdk - Facebook CrashReporter 检测到错误 api facebook-business-php
- python - 我目前正在使用 python 和 tkinter 为 GUI 制作计算器。我已经创建了所有必要的按钮和文本框
- python - 如何将多个字段的可选特性与pydantic联系起来?
- variables - VHDL 乘法输入和相加结果
- multithreading - Jmeter我如何只能提取一次令牌并将其用于对我的api的do x请求
- linux - Raspberry Pi 脚本:如果损坏,请格式化 USB