우리는 RPC 기능이 필요한 프로젝트에서 NodeJs DNode (https://github.com/substack/dnode)를 사용하려고합니다. 설치 및 테스트되었으며 프로젝트에 적합합니다.DNode 서버 메소드 시간 초과
하나의 작은 문제. 원격 함수는 사용자가 정의 할 수 있으므로 논리를 제어 할 수 없습니다. 즉, 함수를 잘못 작성하고 실행하기 위해 과도한 시간이 걸리거나 심지어는 완료되지 않을 수도 있습니다 (순환 루프).
그래서 질문이 : 생성 된 서버 연결/호출에 제한 시간 체크/이벤트/트리거를 구현하는 방법이 있습니까?
예 : 함수가 5 초의 실행 시간을 초과하는 경우 함수를 중단하고 예외 정보를 클라이언트에 반환합니다.
참고 : 클라이언트에 시간 초과 논리를 구현 했으므로 문제가되지 않습니다. 아무런 이유없이 허위의 좀비 프로세스가 서버 구성 요소를 막히게하지 마십시오.
는 편집 : *이 - 코드 예제 추가 -가 *
서버 (포트 8000에서 수신 대기를 callMe는() 기능은 결코 끝이없는, doWork()를 호출합니다.)
var dnode = require('dnode');
function doWork(cltId) {
console.log('Client:' + cltId);
setTimeout(function() { doWork(cltId); }, 5000);
}
var server = dnode({
callMe: function (cltId, cb) {
doWork(cltId);
}
});
server.listen(8000);
클라이언트 (결코 반환하지 않는 포트 8000 및 rpc callMe()에 연결)
var dnode = require('dnode');
var net = require('net');
var d = dnode();
d.on('remote', function (remote) {
var cltId = 'c-' + Math.random().toString(16).slice(2);
remote.callMe(cltId , function (s) {
console.log('Result=' + n);
d.end();
});
});
var conn = net.connect(8000);
conn.pipe(d).pipe(conn);
클라이언트가 실행되면 중단되지만 종료되거나 연결을 종료하는 시간 초과 설정이 될 수 있습니다. 그래서 클라이언트는 다른 일을 계속할 수 있습니다.
하지만
서버는 여전히 명랑하게 멀리 코드의 우리의 끝없는 조각 펀트됩니다 ...
그리고 더 많은 클라이언트 연결하고 우리가 결국 때까지 추가 가짜 좀비로 끝날 다지 코드를 호출 등 나는 모든 서버 자원이 소비되었다고 생각한다.
그래를, 그것을 못하고. 내 이해 클라이언트가 호출 할 서버 코드를 정의 할 수 있습니다. 명확한 설명을 돕기 위해 간단한 클라이언트/서버 예제로 내 질문을 업데이트했습니다. – MarkOfSine