Saya David, dan tujuan saya dengan repositori/artikel ini adalah untuk menghilangkan soket dengan mencoba menjelaskannya dengan cara yang paling sederhana.
Dalam contoh -contoh ini, saya akan menggunakan nodej dan partikel (versi apa pun akan dilakukan) untuk menunjukkan bagaimana perangkat keras dapat berbicara dengan nodeJs, dan sebaliknya. Tapi jangan salah, ini tidak berarti alat yang saya pilih adalah satu -satunya cara untuk melakukan ini. Inilah yang saya tahu secara pribadi.
Perangkat tertanam apa pun dengan konektivitas jaringan akan berfungsi dengan cara yang sama, dan bahasa apa pun dengan dukungan soket juga akan melakukannya.
Struktur repo
Saya percaya ada banyak misteri di sekitar soket. Banyak orang telah membuat mereka terdengar menakutkan selama bertahun -tahun, dan tujuan saya adalah untuk membuktikan bahwa mereka tidak terlalu misterius atau rumit. Saya berharap pada akhirnya Anda akan menganggap soket sebagai solusi yang lebih sederhana untuk masalah tertentu.
Terutama dalam sistem tertanam, di mana setiap byte diperhitungkan.
Soket adalah fondasi untuk semua konektivitas jaringan. Setiap perangkat yang terhubung menggunakan soket. Di atas soket, Anda akan memiliki protokol, yang tidak lain adalah aturan yang menentukan bagaimana data harus dikirim atau diproses setelah diterima. Protokol HTTP yang populer adalah contoh dari ini. Mengetahui hal ini, Anda dapat meniru perangkat apa pun dengan bahasa apa pun yang memiliki dukungan soket. Bagaimana? Dengan mengirim byte yang mematuhi protokol spesifik (aturan). Aturan -aturan ini tersedia secara online secara gratis.
Anda bisa membuat aplikasi yang berpura -pura menjadi:
Mengapa orang percaya soket itu rumit?
Mungkin karena orang cenderung menggunakan kata -kata yang menyampaikan kompleksitas, seperti:
Hanya dengan membaca beberapa poin yang mungkin Anda pikirkan, ini bukan untuk saya. Tapi soket sebenarnya sangat mudah. Misalnya, untuk mendapatkan respons dari server web, Anda hanya perlu mengirim teks berikut:
GET / HTTP/1.1
Ini dia. Server akan mengambil teks ini, menguraikannya, dan memahami bahwa Anda membuat:
/contact untuk mendapatkan halaman kontak.Tidak ada lebih banyak lagi. Printer akan memahami header lain, juga server DNS akan membutuhkan sesuatu yang spesifik untuk protokolnya (aturan).
Sulit dipercaya? Gunakan aplikasi Telnet untuk terhubung ke situs favorit Anda menggunakan perintah ini (hanya koneksi yang tidak aman yang akan didukung melalui port 80).
SITE 80GET / HTTP/1.1Untuk koneksi yang aman, Anda dapat menggunakan OpenSSL sebagai berikut:
Openssl s_client -connect google.com:443GET / HTTP/1.1Contoh lain adalah mengirim email dengan menghubungkan langsung ke server SMTP. Sebagian besar server SMTP saat ini diamankan dengan kata sandi dan menggunakan enkripsi, yang membuatnya sulit untuk menguji ini dengan cepat. Tetapi jika Anda memiliki akses ke server SMTP biasa, Anda bisa mengetik berikut:
telnet example.com smtpHELO client.example.comMAIL from: <[email protected]>RCPT to: <[email protected]>DATAFrom: [email protected]To: [email protected]Subject: Test messageQUITSeperti yang Anda lihat, ini bukan?
Sekarang kami memiliki pemahaman yang lebih baik tentang protokol, Anda harus merancang struktur umum untuk komunikasi. Katakanlah Anda ingin mengirim suhu rumah Anda ke server NodeJS Anda. Aliran byte Anda bisa terlihat seperti ini:
45,40.1,50,90,100,102.5
Koma bertindak sebagai pemisah untuk setiap pengukuran. Anda dapat memilih karakter apa pun yang Anda inginkan, tetapi, hanya agar Anda tahu, koma akan membuat data Anda kompatibel dengan format CSV (Comma Illing Values). Di ujung lain, Anda memerlukan beberapa kode yang akan memeriksa pemisah, dan ketika itu terjadi - Anda memiliki nilai.
Seperti yang dapat Anda lihat dari contoh ini, tidak ada header atau data opsional. Anda memutuskan apa yang terjadi dalam protokol Anda.
Berdasarkan contoh di atas, Anda dapat menambahkan kelembaban ke protokol Anda, seperti ini:
45:80,40:85,32.1:82,50:89
Sekali lagi, koma memisahkan data Anda, sementara usus besar membedakan kumpulan data Anda. Juga: Ingat ... Protokol membutuhkan dokumentasi yang baik, sehingga pengembang lain dapat memahami data yang harus mereka kelola.
Hal penting lainnya adalah contohnya berbicara tentang protocall ASCII, untuk mempelajari cara kerja biner, Anda dapat membaca artikel berikut yang saya tulis berjudul: How-to-Deconstruct-Ping-With-C-dan-NodeJs.
Komputer bekerja di 1 dan 0s, dan ini adalah fakta. Tidak ada cara untuk contoh untuk membedakan aplikasi yang dikompilasi dari data reguler. Semuanya disimpan sebagai serangkaian bit. Artinya bahkan data yang dikirim melalui internet ada di 1 dan 0s.
Anda mungkin bertanya, lalu mengapa saya harus peduli dengan tipe. Karena tergantung pada jenis Anda, data biner Anda akan berbeda. Misalnya: Integer 1 akan menjadi 00000001 , di mana bilangan bulat 31 akan menjadi 00011111 .
Ini berarti bahwa, di ujung lain koneksi, Anda perlu tahu apa yang Anda dapatkan. Katakanlah Anda ingin membuat perbandingan sederhana.
if ( data == 1 ) {
true
} Jika Anda mengonversi data Anda seolah -olah itu adalah bilangan bulat, tetapi Anda mengirimkannya sebagai char, maka Anda akan membandingkan int 31 dengan int 1 . Tetapi jika Anda tahu bahwa Anda mengirim karakter, Anda dapat membandingkannya dengan tipe yang tepat:
if ( data == '1' ) {
true
} Sekarang Char 1 sebenarnya 31 , dan perbandingannya akan berhasil. Di folder contoh Hardware2NodeJS , Anda akan menemukan kode sampel yang menjelaskan perbedaan dalam praktik.
Di internet, dua protokol paling populer untuk mengirim data adalah TCP dan UDP. Anda akan melihat bahwa orang menambahkan /IP di akhir nama. IP adalah singkatan dari (Protokol Internet), dan, singkatnya, Anda dapat menganggapnya sebagai sistem alamat Internet. Ini berarti Anda dapat menggunakan TCP atau UDP tidak hanya di Internet, karena TCP dan UDP adalah cara data dikemas, sistem alamat apa yang akan Anda gunakan terserah Anda.
TCP dan UDP adalah protokol, dan sekarang Anda harus tahu bahwa kata ini berarti aturan, dan kedua protokol ini tidak lebih dari aturan yang menjelaskan cara mengemas data. Akhir lain memahami aturan yang sama, dan dapat membongkar informasi yang diterima, dan sebaliknya.
Sebagian besar internet menggunakan TCP, karena kami ingin jaminan bahwa apa yang kami kirim akan diterima secara keseluruhan di ujung yang lain. Misalnya, jika Anda mengirim dokumen, Anda tidak ingin surat atau kata -kata hilang. Dengan banyak format, jika bagian hilang dari header, yang memberi tahu sistem bagaimana memahami file, sistem akan memberi tahu Anda bahwa file tersebut rusak, dan tidak dapat dibaca.
Tentu saja, ada format yang lebih tangguh dan tidak membutuhkan 100 persen dari data. Beberapa film, gambar, dan format musik, misalnya, dapat memiliki beberapa konten yang hilang, dan kami hanya hidup dengan itu. Gambar atau film mungkin memiliki beberapa artefak aneh; Musik mungkin memiliki beberapa blip dan suara.
Protokol ini sangat berguna saat mengirim data dari produk perangkat keras. Katakanlah kami mengumpulkan data sensor dari banyak perangkat, menggunakan modem seluler, dan kami harus membayar untuk setiap byte yang kami kirim. Dalam hal ini kita harus mempertimbangkan hal -hal berikut: Apakah layak membayar lebih untuk kesetiaan yang lebih tinggi dengan TCP? Atau lebih baik menerima hilangnya beberapa pengukuran, tetapi membayar lebih sedikit untuk transfer data kami?
Biasanya, saya akan default ke arah TCP, tetapi jika Anda memiliki kasus yang baik untuk tidak menggunakannya, UDP adalah pilihan terbaik Anda berikutnya.
Saya harap repositori ini membantu Anda mendapatkan pemahaman yang lebih baik tentang soket apa itu. Jika ada sesuatu yang tidak jelas, pukul saya di Twitter, dan saya akan mencoba memperbaiki poin dalam proyek yang tidak jelas.
Saya ingin mengucapkan terima kasih kepada semua orang baik yang membantu saya dengan proyek ini, termasuk:
Jika Anda menikmati proyek ini, harap pertimbangkan untuk memberikannya? Dan periksa akun GitHub saya, di mana Anda akan menemukan sumber daya tambahan yang mungkin Anda temukan bermanfaat atau menarik.
Proyek ini dipersembahkan oleh 0x4447 LLC, sebuah perusahaan perangkat lunak yang berspesialisasi dalam membangun solusi khusus di atas AWS. Ikuti tautan ini untuk mempelajari lebih lanjut: https://0x4447.com. Atau, kirim email ke [email protected].