Closed kiddnoke closed 5 years ago
补充两个断点截图
@ngot
egg-socket.io/lib/packetMiddlewareInit.js + 25
const sessionMiddleware = app.middleware.filter(mw => {
return mw._name && mw._name.startsWith('session');
})[0];
connectionMiddlewares.unshift(sessionMiddleware);
connectionMiddlewares = connectionMiddlewares.map(mw => eggUtil.middleware(mw));
egg-socket.io/lib/connectionMiddlewareInit.js + 14
const sessionMiddleware = app.middleware.filter(mw => {
return mw._name && mw._name.startsWith('session');
})[0];
const request = socket.request;
request.socket = socket;
const ctx = app.createContext(request, new http.ServerResponse(request));
ctx.packet = packet;
ctx[CtxEventSymbol] = new Emitter();
util.delegateSocket(ctx);
packetMiddlewares.unshift(sessionMiddleware);
packetMiddlewares = packetMiddlewares.map(mw => eggUtil.middleware(mw));
我对koa中间件一知半解, 没弄懂 connectionMiddlewares.unshift(sessionMiddleware) 和 packetMiddlewares.unshift(sessionMiddleware) 是什么目的。
貌似是与 egg-session 插件的冲突而导致的。 @thonatos @ngot
connectionMiddlewares 与 packetMiddlewares 都是闭包单例对象,不应该在每个连接和事件路由中去修改他们。
在调试模式下和开发模式下:每次调用包中间件的处理函数,nodejs函数调用栈深度就会累加,直到到达最大调用深度报RangeError,在生产模式下,打印日志也有发现类似的问题.请问这是bug吗?