gpt4 book ai didi

javascript - 解析来自 Socket 的 HTTP 消息

转载 作者:搜寻专家 更新时间:2023-11-01 00:32:52 25 4
gpt4 key购买 nike

我有一个套接字服务器在同一端口上监听所有类型的数据,如果数据是 HTTP,那么我想解析它,否则我想用它做其他事情......

net.createServer(function(socket){
if(/*socket contains HTTP data*/){
// parse it
}
else{
// do something else with the socket
}
}).listen(999)

我应该如何解析来自套接字的 HTTP 数据?

我已经开始为此目的编写自己的 HTTP 解析器,但我不想重新发明轮子,也许有更好的方法。

最佳答案

在查看了 http.js 的源代码之后,我想到了以下方法来实现它......

var net = require('net'),
http = require('http'),
events = require('events');

var HTTPParser = process.binding('http_parser').HTTPParser;


function freeParser(parser){
if (parser) {
parser.onIncoming = null;
parser.socket = null;
http.parsers.free(parser);
parser = null;
}
};


function parse(socket){
var emitter = new events.EventEmitter();
var parser = http.parsers.alloc();

parser.reinitialize(HTTPParser.REQUEST);
parser.socket = socket;
parser.maxHeaderPairs = 2000;

parser.onIncoming = function(req){
emitter.emit('request', req);
};

socket.on('data', function(buffer){
var ret = parser.execute(buffer, 0, buffer.length);
if(ret instanceof Error){
emitter.emit('error');

freeParser(parser);
}
});

socket.once('close', function(){
freeParser(parser);
});

return emitter;
};


net.createServer(function(socket){
var parser = parse(socket);

parser.on('request', function(req){
// Got parsed HTTP object
});

parser.once('error', function(){
// Not HTTP data
});
}).listen(999);

关于javascript - 解析来自 Socket 的 HTTP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com