eggjs / egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
https://eggjs.org
MIT License
18.88k stars 1.81k forks source link

egg-socket.io packetMiddleware RangeError #3125

Closed kiddnoke closed 5 years ago

kiddnoke commented 5 years ago
kiddnoke commented 5 years ago

补充两个断点截图 _20181025152917

kiddnoke commented 5 years ago

@ngot

kiddnoke commented 5 years ago

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) 是什么目的。

kiddnoke commented 5 years ago

貌似是与 egg-session 插件的冲突而导致的。 @thonatos @ngot

ngot commented 5 years ago

connectionMiddlewares 与 packetMiddlewares 都是闭包单例对象,不应该在每个连接和事件路由中去修改他们。

ngot commented 5 years ago