-
WebSockify jsLanguage/Javascript 2023. 2. 17. 20:18
WebSocket 와 TCP 간 미들웨어로써 동작하며, 각 프로토콜간 Conversion 을 통해 전달하는 역활을 합니다.
nodejs 를 기준으로 작성된 스크립트로써 바이너리화도 가능합니다.
해당 소스를 기준으로 Websocket이나 TCP Socket 단의 동작을 다른 프로토콜로 대체하여도 활용가능할 것으로 보입니다.
로그는 파일로그를 남기게끔 되어있으며, 필요에 따라 파라미터를 환경변수에서 읽어오는 형태의 스크립트로 변경가능합니다.
일반적으로는 연동단에서 필요에 따른 코드를 작성하는것이 맞으나, 프로젝트 진행중 긴급하게 변경해야하는 경우나 고객사의 강력한 요구로 인한 조치시 단기간에 활용가능할것으로 확인됩니다.
아래는 해당 스크립트의 Websocket 메시지 처리 및 연결 종료, 에러처리에 대한 코드를 내포하고 있습니다.
target.on('data', function(data) { //log("sending message: " + data); if (rs) { var tdelta = Math.floor(new Date().getTime()) - start_time; var rsdata = '\'{' + tdelta + '{' + decodeBuffer(data) + '\',\n'; rs.write(rsdata); } try { client.send(data); } catch(e) { log("Client closed, cleaning up target"); target.end(); } }); target.on('end', function() { log('target disconnected'); client.close(); if (rs) { rs.end('\'EOF\'];\n'); } }); target.on('error', function() { log('target connection error'); target.end(); client.close(); if (rs) { rs.end('\'EOF\'];\n'); } });
아래 코드는 스크립트의 TCP 연결에 메시지 처리, 연결 종료, 에러처리에 대한 코드를 내포하고 있습니다.
client.on('message', function(msg) { //log('got message: ' + msg); if (rs) { var rdelta = Math.floor(new Date().getTime()) - start_time; var rsdata = ('\'}' + rdelta + '}' + decodeBuffer(msg) + '\',\n'); rs.write(rsdata); } target.write(msg); }); client.on('close', function(code, reason) { log('WebSocket client disconnected: ' + code + ' [' + reason + ']'); target.end(); }); client.on('error', function(a) { log('WebSocket client error: ' + a); target.end(); });
스크립트 내용이 매우 간단함에 따라서 js에 대한 이해도가 떨어져도 활용할 수 있을것으로 판단됩니다.
Websockify js : https://github.com/novnc/websockify-js