2017-11-02 7 views
1

가능한 한 비동기 코드로 실행하려고하는 웹 작업자가 있습니다.Javascript - 수동으로 웹 작업자 메시지 업데이트

메시지 처리를 허용하면서 웹 작업자에게 while 루프를 보내고 싶습니다. 브라우저에서 이벤트 시스템을 수동으로 업데이트하는 방법이 있습니까? 또는 적어도 웹 작업자의 메시지를 업데이트 하시겠습니까?

Node.js (process._tickDomainCallback())에는 다음과 같은 내용이 있지만 지금까지 웹용 서비스를 찾지 못했습니다.

setTimeout을 사용하는 것은 옵션이 아닙니다. 나는 단순히 해결책이 없다는 해결책이나 확실한 대답을 원합니다.

감사합니다. 당신의 상황이 여기에 무엇

// worker.js 

self.onmessage = function(e) { 
    console.log("Receive Message"); 
}; 

while (true) { 
    UpdateMessages(); // Receive and handle incoming messages 

    // Do other stuff 
} 

답변

0

확실하지 ... 나는 브라우저 측 웹 오디오 API 이벤트 루프가 나는 WebWorker을 추가 있도록 웹 소켓 트래픽이 내 nodejs 서버에서 들어오는에 의해 부적당 한 순간에 중단하기 한 문제가 있었다 중간 계층으로 인해 브라우저 이벤트 루프가 중단되는 것을 막습니다.

WebWorker는 모든 네트워크 트래픽을 처리 한 다음 순환 대기열에 데이터를 채 웁니다. 브라우저 이벤트 루프가 사용 가능한 것으로 간주되면이 공유 대기열에서 데이터를 뽑았습니다 Transferable Object 버퍼). 따라서 WebWorker에 대한 호출을 시작한 이후로 중단되지 않았습니다.

그러나이 접근법은 이벤트 루프를 행복하게 해주었습니다 ... WebWorker가 효과적으로 자체 스레드에 있고 브라우저 측에서 비동기 작업을 수행하므로 비동기 코드를 최소화 할 필요가 없습니다.

+0

내 케이스는 다음과 같습니다. 그것이 얻는만큼 간단합니다. 사용자가 자신의 JavaScript 코드를 실행하길 원하지만 여전히 완전한 동기식 프로그램을 허용하려고합니다. 하지만 여전히이 웹 작업자와 통신해야합니다. 주로 프로그램 실행이 언제 끝났는지 알 필요가 있기 때문에 주로. 대신 이제 setTimeout을 덮어 썼습니다. 아직도 실제 솔루션이 있는지 궁금하지만 지금은이를 수행 할 것입니다. – Oli414