2017-12-15 6 views
0

gps 추적 시스템에서 작업 중이며 js 노드에 서버를 구축했습니다. 파일을 참조하는 방법입니다.동일한 서버에서 tcp/ip 원시 요청 및 http 요청을 처리하는 방법

const net = require('net'); 
const lora_packet = require('lora-packet'); 
const dataParser = require('./dataParser'); 

const clients = []; 


net.createServer(function(socket) { 
    socket.name = socket.remoteAddress + ":" + socket.remotePort; 
    clients.push(socket); 


    socket.on('data', function(data) { 
     console.log("Buffer sent by terminal : "); 
     console.log(data); 
     const packet = lora_packet.fromWire(data, 'hex'); 
     const str = packet._packet.PHYPayload.toString('hex'); 
     dataParser.parse_data(str, socket); 

    }); 
    socket.on('end', function() { 
     clients.splice(clients.indexOf(socket), 1); 
     //broadcast(socket.name + "has left the cartel.\n"); 
    }); 

    function broadcast(message, sender) { 
     clients.forEach(function(client) { 
      if (client === sender) client.write(message + "\nsent\n"); 
      return; 
      client.write(message); 
     }); 
     process.stdout.write(message); 
    } 
}).listen(8080); 

console.log("cartel is running on the port 8080\n"); 

이 서버 파일은 하드웨어의 요청 만 처리하고 원시 tcp/ip 요청을 처리합니다.

서버가 http 요청도 처리하도록하고 서버의 라우팅 기능을 브라우저의 클라이언트 측 응용 프로그램에도 통합하려고합니다.

1) HTTP 요청을 동일한 서버에서 처리 할 수있는 방법이 있습니까? 아니면 다른 포트를 열고 고속 노드 js 응용 프로그램을 배포해야합니까?

2) http에 대해 동일한 8080 포트를 사용하면 어떻게 라우팅 할 수 있습니까?

3) http 및 raw tcp/ip에 다른 포트를 사용하는 경우 두 서버 간의 통신에 가장 적합한 방법은 무엇입니까? tcp/ip 서버와 http 서버 사이의 통신은 소켓 (데이터를 동적으로 전송)을 통해 이루어져야합니다. HTTP 서버에서

소켓을 사용하여 데이터가 실시간 위치를

그래서 흐름 권리가 업데이트 동적으로 브라우저로 확인할 수있다?

하드웨어 (< ---->) TCP/IP 서버 (< --->) HTTP 서버 (< --->) 브라우저

자세한 내용은 쿼리를 해결하기 위해 필요한 경우 나 ' 그것을 제공 할 것입니다!

답변

1

매우 동일한 포트에 여러 개의 프로토콜을 말하려고 복잡 감사드립니다. 들어오는 데이터를 샘플링하고 어떤 프로토콜인지 식별 ​​한 다음 해당 프로토콜을 처리하기 위해 올바른 코드로 연결을 차단하기 위해 각 연결 시작 부분에 일종의 체계가 필요합니다. 나는 그것을 제안하지 않을 것이다.

Express 서버가 HTTP 요청을 처리하기 위해 다른 포트에서 두 번째 서버를 열면됩니다. 아주 간단합니다. 같은 앱에서 바로 할 수 있습니다. 두 서버가 같은 응용 프로그램에있을 수 있기 때문에 한 연결에서 직접 읽고 다른 서버에 쓸 수 있습니다. 프로세스 간 통신이 필요 없습니다.

HTTP 요청을 동일한 서버에서 처리 할 수있는 방법이 있습니까? 아니면 다른 포트를 열고 고속 노드 js 응용 프로그램을 배포해야합니까?

다른 포트를 엽니 다. 두 가지 프로세스를 사용해야하는 구체적인 이유가없는 한 다른 앱을 작성할 필요가 없습니다. 일반 TCP 서버와 Express 서버를 동일한 node.js 응용 프로그램에 둘 수 있습니다.

http에 대해 동일한 8080 포트를 사용하면 어떻게 라우팅 할 수 있습니까?

쉽지 않습니다. 여러 프로토콜에 동일한 포트를 사용하도록 제안하지 마십시오.

http 및 raw tcp/ip에 다른 포트를 사용하는 경우 두 서버 간의 통신에 가장 적합한 방법은 무엇입니까? tcp/ip 서버와 http 서버 사이의 통신은 소켓 (데이터를 동적으로 전송)을 통해 이루어져야합니다.

동일한 node.js 앱에 두 서버를 넣을 수 있으며 동일한 코드로 하나에서 다른 서버로 직접 읽고 쓸 수 있습니다. 프로세스 간 통신이 필요 없습니다. 소켓을 사용

HTTP 서버에서

이 데이터는 브라우저에 동적으로 데이터를 전송

은 일반적으로 브라우저가 웹 소켓 또는 소켓 같은 것을 보유하는 것을 의미합니다 라이브 위치를 업데이트하는 브라우저로 동적으로 보낼 수있다 .io 연결을 사용하여 기존 연결을 통해 언제든지 브라우저에 데이터를 보낼 수 있습니다. 그렇지 않으면 브라우저가 데이터를 요청한 다음 요청할 때 데이터로 응답하도록 "대기"해야합니다.

+0

클라이언트를 express.js 앱에서 어떻게 처리하고 하드웨어 장치를 TCP/IP 서버에서 처리 할 수 ​​있습니까? 소켓간에 일정하고 낮은 지연의 데이터 흐름을 유지하려면 어떻게해야합니까? 두 서버간에 데이터를 전달하는 방법과 웹 브라우저에서 적절한 클라이언트로 패킷을 식별하는 방법은 분명하지 않습니다. 또한 데이터베이스에 데이터를 먼저 저장해야합니까? 단일 소켓 인스턴스에서 작업했지만 다른 서버에서 두 소켓 인스턴스를 유지 관리하는 방법이 아닙니다. –

관련 문제