Я играю с NodeJS и WebSockets, есть событие обновления с его параметром head, как я понял из здесь, что это в основном данные, которые непосредственно отслеживают заголовки, но для моего случая использования он всегда пуст, поэтому я не совсем понимаю, что он означает. Я буду рад, если кто-то сможет предоставить простой случай использования, когда параметр data в событии обновления не пуст.

.

Ответы (1)

Посмотрев на источник, который издает это событие обновления в репозитории node, вы увидите следующую реализацию:

  function socketOnData(d) {
    assert(!socket._paused);
    debug('SERVER socketOnData %d', d.length);
    var ret = parser.execute(d);

    onParserExecuteCommon(ret, d);
  }

  function onParserExecute(ret, d) {
    debug('SERVER socketOnParserExecute %d', ret);
    onParserExecuteCommon(ret, undefined);
  }

  function onParserExecuteCommon(ret, d) {
    if (ret instanceof Error) {
      debug('parse error');
      socket.destroy(ret);
    } else if (parser.incoming && parser.incoming.upgrade) {
      // Upgrade or CONNECT
      var bytesParsed = ret;
      var req = parser.incoming;
      debug('SERVER upgrade or connect', req.method);

      if (!d)
        d = parser.getCurrentBuffer();

      socket.removeListener('data', socketOnData);
      socket.removeListener('end', socketOnEnd);
      socket.removeListener('close', serverSocketCloseListener);
      unconsume(parser, socket);
      parser.finish();
      freeParser(parser, req, null);
      parser = null;

      var eventName = req.method === 'CONNECT' ? 'connect' : 'upgrade';
      if (EventEmitter.listenerCount(self, eventName) > 0) {
        debug('SERVER have listener for %s', eventName);
        var bodyHead = d.slice(bytesParsed, d.length);

        // TODO(isaacs): Need a way to reset a stream to fresh state
        // IE, not flowing, and not explicitly paused.
        socket._readableState.flowing = null;
        self.emit(eventName, req, socket, bodyHead);
...

Переданный параметр, bodyHead, отражает данные из переданного параметра d в функции socketOnData, которая является обработчиком события data сокета по умолчанию. С другой стороны, это может быть undefined, если onParserExecuteCommon была вызвана из onParserExecute. Мне нужно просмотреть исходный текст, чтобы понять, какие случаи будут применяться в зависимости от того, как реализован ваш сервер. Возможно, вы могли бы включить журналы отладки, чтобы увидеть, какие методы вызываются.

2022 WebDevInsider