node.js를 사용할 때 콜백이 '대기열'되는 방식을 잘 모르겠습니다.
노드 mqtt 클라이언트에서 메시지를받는 tcp 서버가 있습니다. 메시지가 mqtt 클라이언트의 onMessage 콜백에 도착하면 연결된 TCP 클라이언트로 메시지를 보내는 메서드가 호출됩니다. 서버는 각각 50-300 바이트의 초당 약 150 개의 메시지를 처리합니다 (최대).
가끔 '미스터리'락업이 있습니다. 서버가 실행 중이지만 클라이언트에 메시지가 전달되지 않습니다.
tcp 서버가 '마지막'메시지로 클라이언트 서비스를 완료하기 전에 '새'메시지가 도착할 수 있다는 생각이 들었고 이것이 혼란 스러울 수 있는지 확실하지 않습니다. 나는 '오래된'메시지 처리기를 처리하는 함수가 나중에 도착하기 위해 스택에 푸시 될 수 있다고 기대합니다. 모든 새 메시지가 서비스되었을 때 계속 될 것입니다.
현재 나는 메시지를 전달하는 함수에 대한 중복 호출을 방지하기 위해 뮤텍스 또는 다른 장치를 사용하지 않습니다. 그래서 내 질문은 중복 도착 가능성이있는이 수준의 메시징을 처리하기 위해 노드와 mqtt 클라이언트를 신뢰해야합니까, 아니면 일종의 조절, 대기열 또는 뮤텍스 기계 를 구축해야 합니까? 그렇다면 kue 모듈 이 논리적으로 갈 수 있습니까?
문제가 내 서버가 아니라 고객 클라이언트에 있음이 밝혀졌습니다. 클라이언트는 메시징 볼륨을 따라갈 수 없었습니다 (아마도 일부 차단 코드로 인해).
mqtt 메시지를 대기열에서 빼고 클라이언트로 보내는 메시지 수를 조절하여 메시지 사이에 5ms 이상이 경과하지 않도록함으로써이를 발견했습니다. 놀랍게도 (그리고 행복하게) 미스터리 메시지 중지 문제는 내가 이것을 한 후에 사라졌습니다.
까다로운 부분은 큐가 합리적인 크기 이상으로 커지지 않도록 클라이언트가 안정적으로 작업 할 수있는 최소 메시지 간격을 찾는 것입니다. 시간이되면 고객이 클라이언트 코드를 수정할 수있을 때까지 일부 메시지를 잃어 버림으로써 최대 대기열 크기를 관리하는 코드를 추가하겠습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다