Rumah >hujung hadapan web >tutorial js >Penghantaran Pdata berasaskan TCP

Penghantaran Pdata berasaskan TCP

DDD
DDDasal
2024-12-29 06:34:13980semak imbas

TCP-based Pdata transmission

ClapPeer - ialah perpustakaan untuk mencipta rangkaian teragih nod yang menyokong pertukaran mesej antara mereka. Nod boleh bertukar-tukar kedua-dua mesej biasa dan disulitkan.
https://github.com/DIY0R/clap-peer


kandungan

  • Ciri
  • Contoh
  • Menyambung ke Nod
  • Menghantar Mesej
  • Menerima Mesej
  • Pengendalian Ralat

ciri-ciri:

  • Penghantaran mesej menggunakan nod perantaraan.
  • Mekanisme TTL untuk mengelakkan gelung mesej.
  • Pertukaran mesej yang disulitkan (RSA AES).

Contoh

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' });

Menyambung ke Nod

Anda boleh menggunakan salah satu daripada dua kaedah untuk menyambung ke nod: melalui kaedah .connect atau dengan menghantar objek konfigurasi semasa membuat nod. Pilih kaedah berdasarkan cara anda mahu menstruktur kod anda. Berikut ialah dua pendekatan:

1. Menyambung menggunakan kaedah .connect():

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });

Di sini, kami mencipta nod dan kemudian memanggil kaedah .connect(), melepasi parameter hos dan port. Ini membolehkan anda memisahkan penciptaan nod dan logik sambungan.

2. Menyambung menggunakan objek konfigurasi semasa penciptaan nod:

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });

Dalam kes ini, kami meneruskan parameter sambungan secara langsung apabila mencipta objek ClapPeer. Kaedah ini mudah jika anda perlu menyambung ke nod sebaik sahaja dibuat.

Menghantar Mesej

1. hantar — Menghantar Mesej Disulitkan

Kaedah hantar digunakan untuk menghantar mesej yang disulitkan. Sebelum menghantar, ia menyemak sama ada kunci awam nod sasaran tersedia:

  • Jika kunci tersedia, mesej disulitkan dan dihantar serta-merta.
  • Jika kunci tidak tersedia, nod meminta kunci awam daripada nod sasaran, kemudian menyulitkan dan menghantar mesej.

Contoh:

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

2. terbitkan — Menghantar Mesej Plain

Kaedah penerbitan menghantar mesej tanpa penyulitan. Ia hanya memajukan data ke nod yang ditentukan.

Contoh:

node.publish(node_2.nodeId, {
  text: 'Hello, open world!',
});

Perbezaan Antara menghantar dan menerbitkan:

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

Menerima Mesej

Nod boleh melanggan acara untuk mengendalikan kedua-dua mesej biasa dan disulitkan.


1. Mengendalikan Mesej daripada terbitan (DM)

Mesej jenis DM dijana apabila nod lain memanggil kaedah penerbitan. Mesej ini dihantar tidak disulitkan.

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. Mengendalikan Mesej daripada hantar (CRYPTO_DM)

Mesej jenis CRYPTO_DM dijana apabila kaedah hantar dipanggil oleh nod lain. Mesej ini diterima dalam bentuk disulitkan.

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });

Perbezaan Antara DM dan 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.

Pengendalian Ralat

Anda boleh melanggan acara ERROR untuk mengendalikan semua ralat.

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });

Parameter messageError.message mungkin mengandungi salah satu daripada mesej berikut:

  • MESSAGE_ERROR_MESSAGE_MASA:

    Semakan jiran tamat masa selepas ${TIMEOUT_DURATION / 1000} saat

  • PERMINTAAN_RALAT_MASA:

    Pengambilan kunci RSA tamat masa.

  • DECRYPT_ERROR:

    Tidak dapat menyahsulit mesej.

  • SEND_ERROR:

    Gagal menghantar data.

  • TERBIT_RALAT:

    Gagal menerbitkan data.

Atas ialah kandungan terperinci Penghantaran Pdata berasaskan TCP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn