> 웹 프론트엔드 > JS 튜토리얼 > TCP 기반 Pdata 전송

TCP 기반 Pdata 전송

DDD
풀어 주다: 2024-12-29 06:34:13
원래의
945명이 탐색했습니다.

TCP-based Pdata transmission

ClapPeer - 노드 간 메시지 교환을 지원하는 분산 노드 네트워크를 생성하기 위한 라이브러리입니다. 노드는 일반 메시지와 암호화된 메시지를 모두 교환할 수 있습니다.
https://github.com/DIY0R/clap-peer


내용물

  • 특징
  • 노드에 연결
  • 메시지 보내기
  • 메시지 수신
  • 오류 처리

특징:

  • 중간 노드를 이용한 메시지 전송
  • 메시지 루프를 방지하는 TTL 메커니즘.
  • 암호화된 메시지 교환(RSA AES)

const {
  ClapPeer,
  DM,
  CRYPTO_DM,
  ERROR,
  INVALID_CRYPTO_DM,
} = require('clap-peer');

//Node - 1
const node_1 = new ClapPeer(1001, 'A');
node_1.on(DM, msg => console.log(msg));
node_1.on(CRYPTO_DM, msg => console.log(msg));

//Node - 2
const node_2 = new ClapPeer(1002, 'B');
node_2.connect({ host: '127.0.0.1', port: 1001 });
node_2
  .send(node_1.nodeId, { hello: 'hello crypto' })
  .catch(error => console.log(error));
node_2.publish(node_1.nodeId, { hello: 'just hello' });
로그인 후 복사
로그인 후 복사

노드에 연결

두 가지 방법 중 하나를 사용하여 노드에 연결할 수 있습니다. .connect 메서드를 통하거나 노드를 생성할 때 구성 개체를 전달하는 것입니다. 코드를 구성하려는 방법에 따라 방법을 선택하십시오. 두 가지 접근 방식은 다음과 같습니다.

1. .connect() 메서드를 사용하여 연결:

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });
로그인 후 복사
로그인 후 복사

여기에서는 노드를 생성한 다음 .connect() 메서드를 호출하여 호스트 및 포트 매개변수를 전달합니다. 이를 통해 노드 생성과 연결 로직을 분리할 수 있습니다.

2. 노드 생성 중 구성 개체를 사용하여 연결:

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });
로그인 후 복사
로그인 후 복사

이 경우 ClapPeer 개체를 생성할 때 연결 매개변수를 직접 전달합니다. 노드 생성 후 바로 접속해야 하는 경우에는 이 방법이 편리합니다.

메시지 보내기

1. 보내기 — 암호화된 메시지 보내기

send 메소드는 암호화된 메시지를 보내는 데 사용됩니다. 보내기 전에 대상 노드의 공개 키를 사용할 수 있는지 확인합니다.

  • 키를 사용할 수 있으면 메시지가 암호화되어 즉시 전송됩니다.
  • 키를 사용할 수 없는 경우 노드는 대상 노드에 공개 키를 요청한 후 메시지를 암호화하여 보냅니다.

예:

node.send(node_2.nodeId, { text: 'Hello, secure world!' }).catch(error => {
  console.log(error);
});
로그인 후 복사

2. 게시 — 일반 메시지 보내기

게시 방법은 암호화하지 않고 메시지를 보냅니다. 단순히 데이터를 지정된 노드로 전달합니다.

예:

node.publish(node_2.nodeId, {
  text: 'Hello, open world!',
});
로그인 후 복사

전송과 게시의 차이점:

Method Encryption Public Key Check Request Public Key if Needed Routing Through Intermediate Nodes
send
publish

메시지 수신

노드는 이벤트를 구독하여 일반 메시지와 암호화된 메시지를 모두 처리할 수 있습니다.


1. 게시(DM) 메시지 처리

다른 노드가 게시 메소드를 호출하면 DM 유형 메시지가 생성됩니다. 이러한 메시지는 암호화되지 않은
전송됩니다.

const {
  ClapPeer,
  DM,
  CRYPTO_DM,
  ERROR,
  INVALID_CRYPTO_DM,
} = require('clap-peer');

//Node - 1
const node_1 = new ClapPeer(1001, 'A');
node_1.on(DM, msg => console.log(msg));
node_1.on(CRYPTO_DM, msg => console.log(msg));

//Node - 2
const node_2 = new ClapPeer(1002, 'B');
node_2.connect({ host: '127.0.0.1', port: 1001 });
node_2
  .send(node_1.nodeId, { hello: 'hello crypto' })
  .catch(error => console.log(error));
node_2.publish(node_1.nodeId, { hello: 'just hello' });
로그인 후 복사
로그인 후 복사

2. 발신 메시지 처리(CRYPTO_DM)

CRYPTO_DM 유형의 메시지는 다른 노드에서 전송 메소드를 호출할 때 생성됩니다. 이러한 메시지는 암호화된 형식으로 수신됩니다.

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });
로그인 후 복사
로그인 후 복사

DM과 CRYPTO_DM의 차이점:

Event Method That Generates the Message Message Type Description
DM publish Plain text message Handled as a regular, unencrypted message.
CRYPTO_DM send Encrypted message Sent and received in an encrypted form.

오류 처리

ERROR 이벤트를 구독하면 모든 오류를 처리할 수 있습니다.

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });
로그인 후 복사
로그인 후 복사

messageError.message 매개변수에는 다음 메시지 중 하나가 포함될 수 있습니다.

  • TIMEOUT_ERROR_MESSAGE:

    ${TIMEOUT_DURATION / 1000}초 후 이웃 확인 시간이 초과되었습니다

  • TIMEOUT_ERROR_REQUEST:

    RSA 키 검색 시간이 초과되었습니다.

  • DECRYPT_ERROR:

    메시지를 해독할 수 없습니다.

  • SEND_ERROR:

    데이터 전송에 실패했습니다.

  • 게시_오류:

    데이터 공개에 실패했습니다.

위 내용은 TCP 기반 Pdata 전송의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿