flexbiz-server
Version:
Flexible Server
4 lines (3 loc) • 1.13 kB
JavaScript
const {parentPort}=require("worker_threads"),{monitorEventLoopDelay}=require("perf_hooks"),v8=require("v8"),Logger=require("../libs/logger.js");
if(parentPort){const $histogram$$=monitorEventLoopDelay({resolution:20});$histogram$$.enable();const $postToParent$$=$payload$$=>{if($payload$$==="pong"||$payload$$.type==="metrics"||$payload$$.error&&!$payload$$.result)return parentPort.postMessage($payload$$);try{const $buffer$$=v8.serialize($payload$$);parentPort.postMessage($buffer$$,[$buffer$$.buffer])}catch($e$$){parentPort.postMessage($payload$$)}};setInterval(()=>{$postToParent$$({type:"metrics",lag:$histogram$$.mean/1E6,alive:!0});$histogram$$.reset()},
1E3);module.exports={postToParent:$postToParent$$,onParentMessage:$callback$$=>{parentPort.on("message",$rawMsg$$=>{let $msg$$=$rawMsg$$;if(Buffer.isBuffer($rawMsg$$)||$rawMsg$$ instanceof Uint8Array)try{$msg$$=v8.deserialize($rawMsg$$)}catch($e$$){return Logger.error("[WorkerUtils] Deserialize error:",$e$$),$postToParent$$({error:"Deserialization failed inside worker"})}$callback$$($msg$$)})}}}else module.exports={postToParent:()=>{},onParentMessage:()=>{}};