2017-11-17 17 views
0

라이브러리 (ddp-client)를 편집하여 매 x 초마다 ping을 보내는 하트 비트 타이머를 사용했습니다. 그러나, 나는 또한 블루투스 하드웨어로 일부 작업을하고 있는데, 나는 때때로 블루투스가 이벤트 루프를 일시적으로 차단하는 것처럼 보이기 때문에 때로는 돌아 가지 않는 핑 (ping)을 담당한다고 생각한다. 이벤트 루프의 특정 기능에 우선 순위를 매길 수있는 방법이 있습니까? 그렇기 때문에 항상 다른 기능보다 먼저 실행됩니다. 서버에서 응답 메시지가 도착할 때 정확히 알 수 없기 때문에 setImmediate이 적합 할 것이라고 생각하지 않습니다. 내가 블루투스 모듈없이 실행하면nodejs 함수 실행의 우선 순위 지정

every X seconds 
if(ping outstanding) { 
    //Did not resolve in time 
    closeConnection() 
} else { 
    ping outstanding = true 
    sendPing() 
} 

이 완벽하게 잘 작동 다음과 같이

타이머의 구현은 대략이다. 블루투스 모듈을 활성화하면 때때로 블루투스를 검색하는 데 걸리는 시간이 타이머 간격보다 길어 실제로 연결되어있는 동안 연결이 끊어지기 때문에 핑이 해결되지 않는 경우가 있습니다.

답변

0

이벤트 루프에서 특정 기능의 우선 순위를 매길 수있는 방법이 있습니까? 그렇다면 다른 기능보다 먼저 실행될 수 있습니까?

아니요. node.js에는 하나의 코드가 다른 코드를 선점하고 항상 우선 순위를 갖는 방법이 없습니다. CPU를 조금 "혹스 (hogs)"하거나 이벤트 루프를 차단하는 코드는 그렇게하지 않거나 자신의 자식 프로세스로 이동할 수 있으며 많은 프로세스 간 통신 중 하나를 통해 통신 할 수 있습니다 계획.

또는, 핑 타이머가 정말 중요한 시간에 실행하는 것이 중요하다면, 어쩌면 일정이 지정된 일정대로 실행될 수있는 자체 자식 프로세스에 있어야합니다.

이와 같이 정밀한 타이머를 구현하면 node.js가 좋지 않은 것이 하나 있습니다. 단일 스레드에서 모든 자바 스크립트를 실행하기 때문에 서버를 즉각적으로 응답 상태로 유지하거나 시간에 정확하게 타이머를 실행하는 것은 아무도 이벤트 루프를 차단하지 못하거나 CPU를 타이밍 임계 값보다 오랫동안 기다릴 필요가 없습니다. 일반적인 해결 방법은 상황을 자신의 하위 프로세스로 이동시켜 CPU에서 우선 순위를 얻는 것입니다.

+0

@robvandijk -이 답변에 대한 질문이 있습니까? 그렇다면 답장 옆에있는 체크 표시를 클릭하여 커뮤니티에 표시하고 stackoverflow에서 적절한 절차를 수행 한 데 대한 평판 포인트를 얻을 수도 있습니다. – jfriend00