Node js에서 response.send와 response.write의 차이점
Node js "restify"프레임 워크를 사용하는 작은 API를 작성했습니다. 이 API는 요청 (실제로 "/"뒤에 오는 모든 것)을 수신 한 다음 해당 요청을 다른 서버로 보냅니다. 서버에서 응답을 받고 원래 요청 소스로 응답을 전달합니다. 이 API의 경우 restify 서버와 클라이언트를 모두 사용하고 있습니다.
아래는 더 나은 이해를위한 API 코드입니다.
var apiServer = require('apiServer');
apiServer.start();
var restify = require('restify');
var assert = require('assert');
function onRequest(request, response, next)
{
var client = restify.createStringClient({
url: 'http://example.com'
});
client.get('/' + request.params[0], function(err, req, res, data) {
assert.ifError(err);
response.setHeader('Content-Type', 'text/html');
response.writeHead(res.statusCode);
response.write(data);
response.end();
});
next();
}
function start()
{
var server = restify.createServer();
server.get(/^\/(.*)/, onRequest);
server.listen(8888);
console.log("Server has started.");
}
exports.start = start;
지금은 차이 알아야 response.write
하고 response.send
Node.js.의를 함께 때문에 response.write
내가 헤더와 거기에 쓰기를 설정할 수 있지만, 내가 사용하는 경우 헤더와 함께 아무것도 할 수 없습니다 response.send
. 언제 사용 response.send
으로 setHeader()
또는 writeHeader()
나는이 오류가 발생합니다 :
http.js : 691 throw new Error ( '헤더를 보낸 후에는 설정할 수 없습니다.'); ^ 오류 : 헤더를 보낸 후에는 설정할 수 없습니다.
또 다른 것이 있습니다. 다음과 response.send()
같이 화면에 완전한 HTML 출력을 얻습니다.
<!DOCTYPE html>\n<html>\n\t<head></head></html> ..... "bla bla bla"
그러나 response.write
화면에 html이 표시되지 않고 텍스트 만 표시됩니다 "bla bla bla"
.
누군가 나에게 차이점을 설명해 줄 수 있다면 좋을 것입니다.
나는 문서response.send()
에서 찾을 수 없지만 응답을 채우고 보낼 것이라고 가정 하므로 한 번만 호출 할 수 있지만 응답을 작성하지만 사용하여 보내야합니다..send()
.write()
response.end()
이는 .write()
응답이 아직 전송되지 않았기 때문에를 사용하여 헤더를 편집 할 수 있음을 의미합니다 .
편집 :
response.send()
restify Response API 래퍼의 일부입니다.
response.send(msg)
와 동등하다 response.write(msg);response.end();
Which means, send
can only be called once, write
can be called many times, but you must call end
yourself.
res.send()
is part of Express.js instead of pure Node.js.
Just an side observation. My app sometimes send back a very large Json object ( HighChart object that contains over 100k points). With res.send()
sometimes it hangs and choke up the server, whereas res.write()
and res.end()
handle it just fine.
I also noticed a memory spike when res.send()
is invoked.
I was trying to send huge text data(295mb) over http using res.send(data) and res.write(data). I noticed that res.send(data) is slower than res.write(data). I observed following things.
res.send(data): it can be called only once and it sends data in chunk of some buffer size to client and then again comes back and sends another chunk of buffer size so there is a lot of back and forth http communication.
res.write(data): It can be called multiple times followed by res.end() and It creates buffer size based on whole data and sends over http so it would be faster in case of huge amount of data.
ReferenceURL : https://stackoverflow.com/questions/21749590/difference-between-response-send-and-response-write-in-node-js
'programing' 카테고리의 다른 글
실행 가능한 인터페이스를 구현하여 생성 된 스레드를 중지하는 방법은 무엇입니까? (0) | 2021.01.17 |
---|---|
.vim ~ / .vimrc를 github (일명 도트 파일)에 추가 (0) | 2021.01.17 |
vue.js의 부모에서 자식 메서드에 액세스하는 방법 (0) | 2021.01.16 |
urllib2를 사용하여 대용량 바이너리 파일을 파일로 스트리밍 (0) | 2021.01.16 |
픽셀을 sp로 변환 (0) | 2021.01.16 |