我寫了一個使用setTimeout
檢查超時請求functon。這個例子使用Typescript,但應該很容易翻譯成香草javascript。
import * as zmq from 'zmq';
function sendZMQRequest(params:any, doneCallback:(error:any, results:any) => void):void{
// init zmq socket.
var zmqreq = zmq.socket('req');
var connectAddress = 'tcp://0.0.0.0:8200';
zmqreq.connect(connectAddress);
// uses setTimeout later.
var timeout;
// callback for zmq response.
var requestCallback = (response:Buffer) => {
// clear the timer when a response comes back.
clearTimeout(timeout);
// parse response and add any error checking you might need.
if(response){
var parsedResp = JSON.parse(response.toString('utf8'));
doneCallback(null, parsedResp);
} else {
doneCallback(new Error('Bad Response'), null);
}
};
zmqreq.send(params);
timeout = setTimeout(() => {
zmqreq.close();
zmqreq.removeListener('message', requestCallback);
doneCallback(new Error('Request Timed Out After 3 Seconds'), null);
}, 3000);
zmqreq.on('message', requestCallback);
}
您是否找到了答案?我試過 socket.setsockopt(zmq.ZMQ_RCVTIMEO,1000); socket.setsockopt(zmq.ZMQ_SNDTIMEO,1000); 但它似乎沒有工作。 – 2016-01-14 16:02:57
@FredMériot我在下面添加了我的答案。 – Cuthbert 2016-01-14 17:12:25