Avi*_*ida 6 javascript websocket node.js
我正在使用 NodeJS 和 WebSockets,有一个带有 head 参数的upgrade 事件,正如我从这里理解的那样,基本上data that directly trails the headers
是如果有人可以提供一个简单的用例,其中升级事件中的数据参数不为空,那就很高兴了。
查看节点存储库中发出升级事件的源,您将看到以下实现:
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);
...
Run Code Online (Sandbox Code Playgroud)
传递的参数反映了函数上bodyHead
传递的参数的数据,这是默认的套接字事件处理程序。另一方面,如果是从 调用的,则可能是这样。我必须更多地查看源代码,以了解哪些情况适用,具体取决于服务器的实现方式。也许您可以启用调试日志来查看正在调用哪些方法。d
socketOnData
data
undefined
onParserExecuteCommon
onParserExecute
归档时间: |
|
查看次数: |
267 次 |
最近记录: |