Dalam setiap layanan Internet modern, hanya ada dua fungsi utama:
- Yang pertama adalah otorisasi pengguna.
- Yang kedua adalah pengiriman instan suatu peristiwa dari server ke klien.
Poin pertama, saya pikir, tidak perlu penjelasan.
Poin kedua adalah teknologi client-server, tetapi sebaliknya. Klien tidak secara berkala membuat permintaan ke server - apakah ada pesan baru. Server, ketika suatu peristiwa tertentu terjadi, segera mengirim pesan ke klien.
Untuk pemahaman yang lebih baik, layanan ini bukan bola tertentu dalam ruang hampa. Layanan dapat direpresentasikan sebagai:
- Folder dengan file di cloud. Informasi tentang mengubah, menambah dan menghapus dikirim ke pengguna lain atau pengguna saat ini, tetapi ke perangkat lain.
- Program komputer untuk membaca log server, ketika catatan "kesalahan" muncul, mengirimkan konten catatan ke pengguna di ponsel.
- Lubang intip video (kamera) mengambil gambar saat bergerak di dekat pintu apartemen.
- Layanan yang menerima telemetri dari aplikasi Android-otomatis.
- Layanan yang mirip dengan paragraf sebelumnya, yang memungkinkan Anda mengetahui apakah seorang anak telah mencapai sekolah atau telah pulang dari sekolah.
Daftar dapat diperluas tanpa batas waktu, sebagai contoh, hanya kasus penggunaan yang paling terkenal yang diberikan.
Hampir semua contoh layanan dapat disajikan dalam bentuk "messenger". Sebagian contoh dijelaskan persis seperti ini, saya melihat artikel tentang cara menghubungkan kamera dan mengirim gambar ke satu kurir terkenal.
Belum lama ini ada sebuah artikel yang orang luar menonton layanan kamera di mata pintu, bukan kecerdasan buatan. Saya tidak akan fokus pada layanan gratis dari perusahaan besar "baik". Seperti yang mereka katakan dalam pepatah terkenal "Keju gratis terjadi di perangkap tikus" dan dipandu oleh pepatah lain "Kemeja Anda lebih dekat ke tubuh Anda", "layanan" Anda lebih baik.
Kode skrip server terbuka dan gratis
Saya memilih node.js socket.io postgreSQL untuk implementasi, saya mengimplementasikan versi pertama lebih dari dua tahun yang lalu, dan layanan ini terhubung erat dengan 1c
https://infostart.ru/public/545047/ , mereka belum mengumumkan server interaksi di mana saja. Tetapi itu sudah lama sekali, pada saat ini, bagian server sama sekali tidak terhubung dengan program yang disebutkan, bagian klien dapat diintegrasikan sebagai pemrosesan eksternal atau ekstensi.
Nama yang dipilih signifikan - "push0k". Bagian pertama diambil dari frasa "pesan push", bahasa Inggris kedua yang terkenal baik-baik saja dalam bentuk disingkat, tetapi ditulis sampai nol untuk yang paling signifikan.
Dalam hal ini, ini bukan "keju gratis dalam perangkap tikus", karena ini membutuhkan komputer windows, linux, macOS (server) untuk bekerja melalui Internet, Anda memerlukan alamat ip eksternal, mungkin diteruskan. Lebih disukai nama domain yang terkait dengan alamat ip eksternal. Juga, itu diinginkan, tetapi tidak perlu, bukan sertifikat yang ditandatangani sendiri terkait dengan nama domain.
Tidak ada persyaratan perangkat keras seperti itu, dapat bekerja di rumah nas, di mana ada buruh pelabuhan. Docker di nas berarti arsitektur x86-64, dan postgreSQL tidak dapat diinstal di nas tersebut tanpa docker. Pemahaman yang akurat tentang berapa banyak klien yang dapat didukung server seperti itu tergantung pada tugas - logika layanan dan lalu lintas yang ditransmisikan antara klien.
Deskripsi Server:
Server menggunakan modul tambahan:
- socket.io - modul menambahkan protokol websocket dengan satu ton ext. peluang.
- node-postgres - modul untuk komunikasi dengan server database postgreSQL.
- pm2 adalah modul untuk memulai beberapa proses server dengan load balancer.
File Server:
- layanan starter.js - http, Anda dapat mengatakan panel admin server. Melalui layanan ini, pengaturan diubah dan proses server websocket utama diluncurkan.
- push0k.js adalah server websocket utama.
- starter_cfg.js - pengaturan skrip administrasi server. Koneksi ke postgreSQL dan file untuk koneksi https. File untuk koneksi https, serta nama domain, mungkin berbeda dari server utama, untuk keamanan yang lebih besar. Itu diubah secara manual pada awal pertama.
- config.js - pengaturan dasar seluruh server.
- package.js - modul pembuat versi deskripsi file yang diperlukan untuk pekerjaan.
- push0kStructure.sql - deskripsi file dari database postgreSQL untuk inisialisasi awal, sebuah database kosong.
Instalasi:
1. Awalnya, Anda perlu menginstal node.js
nodejs.org/en/download2. PostgreSQL juga harus diinstal pada komputer jaringan lokal atau
postgrespro.ru/products/download yang sama
Pada server postgreSQL, perlu untuk mengeksekusi file "push0kStructure.sql" atau hampir semua pertanyaan dari file ini untuk membuat database dengan tabel yang diperlukan.
3. Unduh lima file server pertama, kecuali push0kStructure.sql, ke direktori komputer mana pun.
4. Dalam editor teks apa pun, edit file "starter_cfg.js". Penting untuk menentukan parameter untuk menghubungkan ke server postgreSQL dan mengatur port untuk menghubungkan ke bagian administratif dari server push0k.
5. Mulai terminal (konsol) dan gunakan perintah "cd / path / direktori / Anda /" untuk pergi ke direktori file server. Jalur yang ditentukan dalam perintah terminal harus dari titik 3.
6. Jalankan perintah di terminal “npm install” untuk menginstal modul tambahan.
Jalankan perintah di terminal "simpul starter.js" untuk memulai layanan administrasi.
7. Unduh dan instal program admin push0k. Dalam "push0k admin" parameter dasar websocket, port server, jumlah proses dan banyak lainnya dikonfigurasi. Anda dapat mengontrol awal dan berhenti proses server, membuat dan mengelola pengguna dan kamar mereka (grup).
Aplikasi admin Push0k

Aplikasi ini dibuat pada elektron menggunakan vue.js. Di dalam, semacam sistem jendela diterapkan, dialog modal kecil dapat diseret dan dijatuhkan seperti windows, judul jendela untuk windows dibuat mirip dengan windows 10, untuk Mac OS seperti dalam versi terbaru, tetapi sejauh ini tanpa memperhitungkan tema gelap. Untuk linux, saya akan kompilasi nanti, itu sedikit lebih rumit dengan judul dialog, saya pikir itu akan seperti di ubuntu dan, jika tidak ubuntu, maka menangkan 10 gaya. Konsumsi memori pada win 10 dan Mac OS lebih dari 150 megabyte tidak melihat.
Pada versi sebelumnya tidak mungkin menambahkan animasi, melakukan sedikit tanpa fanatisme. Dialog yang dijelaskan sebelumnya - jendela muncul dari tengah jendela aplikasi, secara bertahap meningkat, ketika terbang, terbang ke tengah, menurun. Juga, penekanan tombol dan bidang yang diperlukan akan dianimasikan.

Selama implementasi, ada keinginan besar untuk membuat tema gelap, tetapi karena belum ada tema terang, saya harus puas dengan hanya panel tombol di sebelah kanan. Pada Mac OS, ini hanya bagian gelap yang memiliki efek semangat, yaitu, sebagian transparan, mirip dengan sebagian besar jendela antarmuka standar. Sayangnya, di Windows, efek serupa yang disebut desain lancar tidak dapat dilakukan karena tidak ada fungsi serupa di Windows untuk elektron.
Seperti disebutkan sebelumnya, kontrol menggunakan protokol http dan ws (websocket). Dimungkinkan untuk menggunakan koneksi https dan wss aman. Dengan koneksi yang aman, Anda dapat melihat data sertifikat yang digunakan. Sama halnya dengan browser, ikon "Kunci" digunakan - koneksi aman, "Kunci terbuka" - koneksi tidak aman. Dan tanpa ikon, masing-masing - koneksi aman tidak digunakan.

Logika umum
Saya belum pernah melihat aplikasi seperti itu. Selama pengembangan, saya dibimbing oleh fakta bahwa saya sendiri akan tertarik untuk memantau dan parameter apa yang harus dilihat dalam statistik.
Misalnya, dalam tabel koneksi untuk setiap koneksi terdapat data "waktu koneksi", "waktu otorisasi", "waktu sinkronisasi". Yang pertama memungkinkan Anda untuk memahami seberapa cepat koneksi "ws: //" atau "wss: //" yang diproteksi terbentuk. Yang kedua - setelah koneksi, pesan dengan data otorisasi dikirim secara terpisah, selama otorisasi, permintaan verifikasi pengguna dilakukan dan cek hash kata sandi unik untuk setiap koneksi. Ketiga adalah waktu untuk menerima pesan baru dan data referensi baru atau diperbarui. Juga, versi node.js, socket.io, dan data yang dijelaskan lainnya umumnya disimpan, yang memungkinkan untuk memahami bagaimana pembaruan node.js atau modul secara terpisah memengaruhi kecepatan, atau beberapa perbaikan server dapat memengaruhi.

Dalam contoh di atas, hanya sebagian kecil dari data tersebut yang dijelaskan. Juga, dalam tabel yang terpisah, waktu, ukuran dan kecepatan MB / s disimpan. Unduh sinkronisasi data. Tabel yang sama menyimpan data mengunduh file lampiran ke server dan mengunduh data ini dari server.
Waktu untuk menghitung kecepatan dihitung pada klien atau server, tergantung pada situasinya. Tidak mungkin menggunakan waktu dari server dan klien karena tidak dapat disinkronkan dengan sempurna. Ini memberlakukan kelambatan ukuran ping kecil (konfirmasi pengiriman) antara klien dan server. Saat mengunggah atau mengunduh file besar, lag yang dijelaskan tidak signifikan.
Di tabel koneksi, Anda dapat melihat koneksi tertutup dengan data "byte yang dikirimkan", "byte yang diterima" dan "ukuran" dari data sinkronisasi lebih dari "byte yang ditransmisikan". Saat menyinkronkan data, kompresi otomatis socket.io digunakan, saat mengunduh atau mengunduh lampiran, kompresi otomatis dinonaktifkan, karena sering mengompresi yang telah dikompres secara negatif mempengaruhi kecepatan.
Seperti yang ditulis di awal artikel, tidak pernah ada tujuan untuk membuat satu layanan umum dan menghubungkan pengguna sebanyak mungkin ke sana. Tapi itu selalu menarik berapa banyak secara teoritis ada pengguna dan jenis server apa yang akan ditahan.
Untuk melakukan ini, saya membuat tes sederhana: Online ke klien dari ruangan tertentu (grup), pesan dikirim dengan parameter uji (dalam parameter hanya ada satu parameter utama - jumlah pesan), yang akan dikirim masing-masing klien ke klien lain secara online. Setelah distribusi pengujian, total waktu semua pesan, notifikasi, entri dalam tabel postgresql, jumlah semua pesan, notifikasi dan entri dihitung, dan dengan demikian, kecepatan dihitung, termasuk total semua operasi di server.
Contoh dari tangkapan layar:
Terkadang paling mengejutkan, hanya 10.000 pesan dan 390.000 isyarat,
mengirim 50.000 pesan: Proses server: 4 Pengguna: 3
Total pesan yang diterima 10.000 * 3 = 30.000
Penerusan ke proses server lain 30.000 * Proses server: 4 - 1 = 90.000
Dikirim ke penerima 30.000 * Pengguna: 3 - 1 = 60.000
Pesan ditulis ke tabel postgreSQL 30.000
90.000 pemberitahuan pengiriman diterima
Tercatat dalam tabel notifikasi pengiriman postgreSQL 90.000
Semua operasi 390.000Logika data di admin push0k
Dengan setiap koneksi, semua data referensi diperoleh: pengguna, ruang, perangkat, basis data, serta 300 entri terakhir dari "jurnal-statistik": Koneksi, Sinkronisasi Data, Penerusan lampiran, Pesan, Jurnal.
Pesan praktis mengulangi tabel postgresql dan tidak memiliki filter, pengaturan dan formulir di mana Anda dapat melihat pesan sepenuhnya. Logika tabel adalah debugging, adalah mungkin untuk dengan cepat melihat selama pengembangan apakah pesan telah mencapai tabel atau belum.

Tabel "Pengguna", "Kamar (grup)", "Koneksi" dan "Jurnal" diperbarui secara otomatis. Untuk sisa data, tidak ada gunanya memperbarui online.
Aplikasi admin push0k dapat diunduh di sini:
Windows:
Pengaturan push0kadmin 19.1.11.exeMac OS:
push0kadmin-19.1.11.dmgIni gratis, tetapi tidak seperti server, saya belum berencana untuk membuka kode sumber.
Pada artikel selanjutnya saya akan menjelaskan bagian klien dari klien desctop push0k, serta contoh kecil, kode dan cara menghubungkan, masuk dan menerima data dari server.
Untuk versi sebelumnya yang disebutkan sebelumnya ada juga klien android, hidup abadi di latar belakang pada versi android ke-7 dan ke-8. Tetapi untuk saat ini, saya pikir saya tidak ketinggalan lama. Nantinya, saya pikir akan ada artikel ketiga dengan klien android, dan di sana Anda melihat dan iOS tidak jauh.