나는 혜성 서버로 nodeJS를 사용할 계획이며 테스트를 위해 몇 가지 코드를 썼다. 그러나 클라이언트가 서버에 처음 연결되었을 때 서버로부터 응답을 얻을 수 없다는 문제가있다.왜 내가 nodeJS 'httpServer에서 처음 몇 응답을 얻을 수 없었습니까?
var util = require('util');
var redis = require('redis').createClient(6379, '192.168.1.254');
var http = require('http');
redis.on("error", function (err) {
console.log("Error " + err);
});
var server = http.createServer(requestListener);
server.listen(9898, '192.168.1.254');
function requestListener(req, res) {
util.log('Connected.');
redis.brpoplpush('msg:q:1', 'msg:s:1', 20, function(err, reply) {
if (err) {
util.log('ERROR: ' + err);
}
var length = reply ? reply.length : 0;
res.writeHead(200, {
'Content-Type':'text/plain',
'Content-Length':length
});
if (length) {
res.end(reply);
util.log('Sent: ' + reply);
} else {
res.end('');
}
});
}
그리고 클라이언트 코드 (client.sh) :
#!/bin/bash
while [ 1 ]
do
curl -i http://192.168.1.254:9898
done
내가 그것을 테스트 다음 단계 :
다음 은 서버 측 코드 (server.js)입니다- node server.js
- ./client.sh 레디 스에서 91,363,210
- 는 LPUSH ('메시지 : Q : 1', 'blablah') 이제
, "받는 사람 : blablah는"res.end(reply)
이 excuted, 콘솔에 인쇄하지만, 클라이언트는 아무것도받지 않습니다. 3 단계를 여러 번 반복하면 예상대로 작동합니다. 클라이언트를 다시 시작하면 처음 몇 개의 응답을 다시 수신 할 수 없습니다.
어떻게 해결할 수 있습니까?
무한 while 루프를 사용하지 말고 for 루프를 최대 5 개 또는 10 개 사용하십시오. 그런 다음 계속 발생하는지 확인하십시오. – Raynos
Raynos : 고마워. 클라이언트가 응답을 기다리는 블로킹 모드에 있습니다. 명령 'curl -i http : // ...'을 실행하면 변경된 사항은 없지만 여전히 응답을 얻을 수 없습니다. – Zillion
는 붉게 보이는 것처럼 보입니다. 나에게 노드 코드는 괜찮아 보인다. – Raynos