Bagaimana bahagian belakang permainan penggodam tentang memusnahkan pelayan dicipta

Bagaimana bahagian belakang permainan penggodam tentang memusnahkan pelayan dicipta
Kami terus memberitahu anda bagaimana pencarian laser kami dengan pemusnahan pelayan telah diatur. Mulakan dalam sebelumnya artikel tentang menyelesaikan pencarian.

Secara keseluruhan, bahagian belakang permainan mempunyai 6 unit seni bina, yang akan kami analisis dalam artikel ini:

  1. Bahagian belakang entiti permainan yang bertanggungjawab untuk mekanisme permainan
  2. Bas pertukaran data bahagian belakang dan tapak pada VPS
  3. Penterjemah daripada permintaan bahagian belakang (elemen permainan) kepada Arduino dan perkakasan di tapak
  4. Arduino, yang bertanggungjawab mengawal geganti, menerima arahan daripada penterjemah dan melakukan kerja sebenar
  5. Peranti sebenar: kipas, kalungan, lampu lantai, dsb.
  6. Frontend - tapak web Falcon itu sendiri, dari mana pemain mengawal peranti

Mari kita lalui setiap daripada mereka.

Bahagian belakang entiti permainan

Bahagian belakang telah dilaksanakan sebagai aplikasi but spring: ia mempunyai beberapa pengawal rehat, titik akhir soket web dan perkhidmatan dengan logik permainan.

Terdapat hanya tiga pengawal:

  • Megatron. Halaman Megatron semasa dihantar melalui permintaan GET: sebelum dan selepas menghidupkan kuasa. Laser dilepaskan melalui permintaan POST.
  • Memetakan halaman tilde supaya ia dihidangkan mengikut nama halaman. Tilde menghasilkan halaman untuk eksport bukan dengan nama asal, tetapi dengan ID dalaman dan maklumat pematuhan.
  • Pengawal Captcha untuk menyediakan captcha pelayan pseudo-beban tinggi.

Titik akhir soket web digunakan untuk mengawal alat: lampu, kalungan dan huruf. Ia dipilih untuk memaparkan secara serentak kepada semua pemain status semasa peranti: sama ada ia dihidupkan atau dimatikan, aktif atau tidak, warna huruf yang sedang dinyalakan di dinding. Untuk menjadikan tugas menghidupkan laser menjadi lebih sukar, kami menambahkan kebenaran pada kalungan dan laser dengan log masuk dan kata laluan pentadbir/pentadbir yang sama.

Pemain boleh mengujinya dengan menghidupkan kalungan dan mengulangi perkara yang sama dengan laser.

Kami memilih pasangan log masuk-kata laluan yang begitu remeh untuk tidak menyeksa pemain dengan pemilihan yang tidak perlu.

Untuk menjadikan tugas itu lebih menarik sedikit, ID objek daripada mongodb telah digunakan sebagai pengecam peranti di dalam bilik.

ObjectId mengandungi cap masa: dua nilai rawak, satu daripadanya diambil berdasarkan pengecam peranti, dan yang kedua berdasarkan pid proses yang menjananya dan nilai pembilang. Saya ingin membuat pengecam dijana pada selang masa yang tetap dan dengan proses pid yang berbeza, tetapi dengan pembilang biasa, supaya pemilihan pengecam peranti laser akan menjadi lebih menarik. Walau bagaimanapun, pada akhirnya, semua orang bermula dengan pengecam yang berbeza hanya dalam nilai pembilang. Ini mungkin telah menjadikan langkah terlalu mudah dan tidak memerlukan analisis struktur objectId.

Penterjemah daripada permintaan bahagian belakang

Skrip Python, yang bekerja pada pemasa dan menterjemahkannya daripada abstraksi permainan kepada model fizikal. Sebagai contoh, "hidupkan lampu lantai" β†’ "hidupkan geganti N2."

Skrip disambungkan ke baris gilir RabbitMQ dan memindahkan permintaan daripada baris gilir ke Arduino. Ia juga melaksanakan logik pensuisan lampu selari: bersama-sama dengan beberapa peranti, lampu padanya dihidupkan, sebagai contoh, apabila kuasa pada mulanya dibekalkan kepada Megatron, ia diterangi dengan lampu pentas. Reka bentuk pencahayaan untuk sinematografi keseluruhan adegan adalah cerita yang berasingan tentang kerja hebat pengeluar bersama projek kami dan pereka pengeluaran Ilya Serov, dan kami akan menceritakannya dalam jawatan berasingan.

Penterjemah juga bertanggungjawab untuk logik melancarkan mesin pencincang menggunakan pemasa dan menghantar imej ke TV: pemasa untuk melancarkan mesin pencincang, capybara yang menjerit, iklan pada akhir permainan.

Bagaimana logik untuk menjana token Megatron distrukturkan

Pukulan ujian

Setiap 25 saat token baharu dijana dan boleh digunakan untuk menghidupkan laser selama 10 saat pada kuasa 10/255. Pautan ke github dengan kod Megatron.

Laser kemudian menjadi sejuk selama 1 minit - pada masa ini ia tidak tersedia dan tidak menerima permintaan tangkapan baharu.

Kuasa ini tidak mencukupi untuk membakar melalui tali, tetapi mana-mana pemain boleh menembak Megatron dan melihat pancaran laser beraksi.

Algoritma pencincangan MD5 digunakan untuk menjana token. Dan skim itu berjaya MD5 daripada MD5 + kaunter + rahsia untuk token pertempuran dan tanpa rahsia untuk token ujian.

MD5 adalah rujukan kepada projek komersial yang Pavel, backender kami, lakukan. Hanya beberapa tahun yang lalu projek ini menggunakan MD5, dan apabila dia memberitahu arkitek projek bahawa ia adalah algoritma penyulitan yang lapuk, mereka mula menggunakan MD5 daripada MD5. Memandangkan kami memutuskan untuk membuat projek yang paling noob mungkin, dia mengingati segala-galanya dan memutuskan untuk membuat rujukan kecil.

Tembakan tempur

Mod tempur Megatron ialah 100% kuasa laser pada 3 watt. Ini cukup selama 2 minit untuk membakar melalui tali yang menahan berat, untuk memecahkan akuarium dan membanjiri pelayan dengan air.

Kami meninggalkan beberapa petunjuk tentang Github projek: iaitu, kod penjanaan token, yang mana seseorang boleh memahami bahawa token ujian dan tempur dijana berdasarkan penunjuk kaunter yang sama. Dalam kes token tempur, sebagai tambahan kepada nilai balas, garam juga digunakan, yang hampir sepenuhnya ditinggalkan dalam sejarah mengubah intipati ini, kecuali dua aksara terakhir.

Mengetahui data ini, adalah mungkin untuk mengisih 2 simbol terakhir garam dan benar-benar mengetahui bahawa nombor dari Hilang, ditukar kepada sistem perenambelasan, digunakan untuknya.

Kemudian pemain perlu menangkap nilai kaunter (dengan menganalisis token ujian) dan menjana token tempur menggunakan nilai kaunter seterusnya dan garam yang dipilih pada langkah sebelumnya.

Kaunter hanya bertambah dengan setiap pukulan ujian dan setiap 25 saat. Kami tidak menulis tentang ini di mana-mana, ia sepatutnya menjadi kejutan permainan kecil.

Perkhidmatan interaksi Captcha

Dalam dunia permainan, ini adalah captcha yang sama yang perlu dimuatkan untuk menghidupkan kipas dan membuka carta selak dengan sedikit petunjuk. Di sebelah kamera terdapat komputer riba dengan pemantauan beban.

Bagaimana bahagian belakang permainan penggodam tentang memusnahkan pelayan dicipta

Perkhidmatan Saya mengira apa yang perlu dipaparkan dalam pemantauan sebagai beban semasa: suhu dan Kipas CPU. Metrik telah dipindahkan ke pangkalan data pangkalan masa dan dilukis oleh grafana.

Jika dalam 5 saat terakhir terdapat lebih daripada 50 permintaan untuk memaparkan captcha, maka beban meningkat dengan bilangan langkah tetap + rawak. Pengiraan adalah bahawa beban 100% boleh dicapai dalam masa dua minit.

Malah, terdapat lebih logik dalam perkhidmatan daripada yang dipaparkan dalam permainan terakhir: kami meletakkan monitor sedemikian rupa sehingga hanya putaran Kipas CPU kelihatan.

Pada permulaan pencarian mereka mahu membiarkan Grafan boleh diakses dari laman web Falcon. Tetapi ia juga mengandungi metrik springboot daripada laporan aplikasi bahagian belakang, yang kami tidak mempunyai masa untuk mengosongkannya, jadi kami memutuskan untuk menyekat akses kepadanya. Dan memang betul - walaupun pada permulaan pencarian, sesetengah pemain meneka bahawa aplikasi itu ditulis dalam rangka kerja springboot dan juga menggali nama beberapa perkhidmatan.

Pengehosan dan bas data

Alat untuk memindahkan maklumat dari bahagian belakang ke tapak, pelayan VPS yang RabbitMQ sedang berjalan.

Bahagian belakang dan bas data terus dihidupkan VPS kami. Kuasanya setanding dengan komputer yang anda lihat pada skrin: VPS 2 teras dengan dua gigabait RAM. Tarif telah dikenakan untuk sumber, memandangkan beban puncak dirancang untuk beberapa hari sahaja - inilah yang dilakukan oleh pelanggan kami yang merancang untuk memuatkan VPS untuk jangka masa yang singkat. Kemudian ternyata beban itu lebih tinggi daripada yang kita jangkakan, dan tarif tetap akan lebih menguntungkan. Jika anda melakukan pencarian, pilih tarif talian turbo.

Untuk melindungi pelayan daripada DDoSa, kami menggunakan Cloudflare.

Perlu dikatakan bahawa VPS menahan segala-galanya dengan terhormat.

Arduino, yang bertanggungjawab mengawal geganti, menerima arahan daripada penterjemah dan melakukan kerja sebenar

Ini lebih kepada topik artikel seterusnya tentang bahagian perkakasan projek: bahagian belakang hanya menghantar permintaan untuk menghidupkan geganti tertentu. Kebetulan bahagian belakang mengetahui hampir semua entiti dan permintaan daripadanya kelihatan seperti "hidupkan entiti ini." Kami melakukan ini untuk ujian awal tapak (kami belum memasang semua Arduino dan relay), akhirnya kami meninggalkan segala-galanya seperti itu.

Bahagian hadapan

Kami dengan cepat mencipta tapak di tilde, ia mengambil masa satu hari bekerja dan menjimatkan 30 ribu pada bajet kami.

Pada mulanya, kami terfikir untuk hanya mengeksport tapak dan menambah logik yang kami hilang, tetapi kami menghadapi syarat penggunaan yang melarang kami daripada melakukan ini.

Kami tidak bersedia untuk melanggar lesen, jadi terdapat dua pilihan: untuk melaksanakan segala-galanya sendiri atau menghubungi Tilda secara langsung, bercakap tentang projek dan meminta kebenaran untuk menukar kod.

Kami memilih pilihan kedua dan mereka bukan sahaja bertemu kami separuh jalan, malah memberi kami akaun perniagaan percuma selama setahun, yang mana kami amat berterima kasih kepada mereka. Ia sangat janggal menunjukkan reka bentuk laman web Sokol kepada mereka.

Akibatnya, kami melampirkan logik js pada bahagian hadapan untuk menghantar permintaan ke peranti asas dan mengubah sedikit gaya butang untuk menghidupkan dan mematikan elemen permainan.

Reka bentuk laman web

Sejarah carian, yang bernilai bab yang berasingan.

Kami mahu mencipta bukan sahaja tapak lama, tetapi benar-benar menjijikkan yang melanggar semua peraturan asas reka bentuk. Pada masa yang sama, adalah penting untuk mengekalkan kebolehpercayaan: ia tidak perlu memecahkan cerita ENT, menunjukkan keangkuhan pengarang, dan pemain perlu percaya bahawa tapak sedemikian boleh wujud dan juga membawa pelanggan. Dan dia membawanya! Semasa permainan berlangsung, kami telah dihubungi dua kali untuk membuat laman web.

Pada mulanya saya membuat reka bentuk sendiri, cuba memasukkan lebih banyak gif dan elemen berkilat. Tetapi suami pereka saya yang berusia 10 tahun memandang ke atas bahunya dan menolaknya sebagai "terlalu bagus." Untuk melanggar peraturan reka bentuk, anda perlu mengetahuinya.

Bagaimana bahagian belakang permainan penggodam tentang memusnahkan pelayan dicipta

Terdapat beberapa kombinasi warna yang menimbulkan rasa jijik yang berkekalan: hijau dan merah dengan kekayaan yang sama, kelabu dan merah jambu, biru ditambah coklat. Pada akhirnya, kami memilih gabungan merah dan hijau sebagai warna asas, menambah gif dengan kucing dan memilih 3-4 foto Sokolov sendiri daripada foto stok. Saya hanya mempunyai beberapa keperluan: seorang lelaki pertengahan umur, memakai sut yang tidak sesuai dengan saiz pasangan yang terlalu besar dan dalam pose "gambar studio profesional". Untuk ujian, mereka menunjukkannya kepada rakan-rakan dan bertanya "bagaimana anda menyukainya?"

Semasa proses pembangunan reka bentuk, suami saya terpaksa berbaring setiap setengah jam; helikopter mula terbang. Pasha cuba membuka konsol pembangun pada kebanyakan skrin semasa dia selesai menyelesaikan bahagian hadapan - untuk melindungi matanya.

Peranti sebenar

Kipas dan lampu dipasang melalui geganti keadaan pepejal supaya ia tidak akan dihidupkan pada kuasa penuh serta-merta - supaya kuasa akan meningkat selari dengan pemantauan.

Tetapi kita akan bercakap tentang ini dalam siaran seterusnya, tentang bahagian perkakasan permainan dan pembinaan sebenar tapak.

Tinggal!

Artikel lain tentang usaha untuk memusnahkan pelayan

Bagaimana bahagian belakang permainan penggodam tentang memusnahkan pelayan dicipta

Sumber: www.habr.com

Tambah komen