เรายังคงบอกคุณต่อไปว่าภารกิจเลเซอร์ของเรากับการทำลายเซิร์ฟเวอร์นั้นถูกจัดเตรียมอย่างไร เริ่มต้นในก่อนหน้านี้
โดยรวมแล้วแบ็กเอนด์ของเกมมี 6 หน่วยสถาปัตยกรรม ซึ่งเราจะวิเคราะห์ในบทความนี้:
- แบ็กเอนด์ของเอนทิตีเกมที่รับผิดชอบกลไกของเกม
- แบ็กเอนด์และบัสแลกเปลี่ยนข้อมูลไซต์บน VPS
- นักแปลจากคำขอแบ็กเอนด์ (องค์ประกอบเกม) ไปยัง Arduino และฮาร์ดแวร์ในไซต์
- Arduino ซึ่งมีหน้าที่ควบคุมรีเลย์ ได้รับคำสั่งจากผู้แปลและดำเนินการจริง
- อุปกรณ์จริง พัดลม พวงมาลัย โคมไฟตั้งพื้น ฯลฯ
- ส่วนหน้า - เว็บไซต์ Falcon ซึ่งผู้เล่นควบคุมอุปกรณ์
แบ็กเอนด์ของเอนทิตีเกม
แบ็กเอนด์ถูกนำมาใช้เป็นแอปพลิเคชัน Spring Boot: มีตัวควบคุมส่วนที่เหลือหลายตัว จุดสิ้นสุดของ websocket และบริการที่มีตรรกะของเกม
มีผู้ควบคุมเพียงสามคนเท่านั้น:
- เมกะตรอน หน้าเมกะทรอนปัจจุบันถูกส่งผ่านคำขอ GET ก่อนและหลังเปิดเครื่อง เลเซอร์ยิงผ่านคำขอ POST
- การแมปหน้าตัวหนอนเพื่อให้แสดงตามชื่อหน้า Tilde สร้างเพจสำหรับการส่งออกไม่ใช่ด้วยชื่อดั้งเดิม แต่มี ID ภายในและข้อมูลการปฏิบัติตามข้อกำหนด
- ตัวควบคุม Captcha เพื่อให้บริการ captcha เซิร์ฟเวอร์หลอกที่มีโหลดสูง
จุดสิ้นสุด Websocket ใช้เพื่อควบคุมอุปกรณ์ต่างๆ เช่น โคมไฟ พวงมาลัย และตัวอักษร ได้รับเลือกให้แสดงสถานะปัจจุบันของอุปกรณ์ให้ผู้เล่นทุกคนเห็นพร้อมกัน ไม่ว่าจะเปิดหรือปิด ใช้งานอยู่หรือไม่ก็ตาม ตัวอักษรสีใดที่ติดสว่างอยู่บนผนัง เพื่อให้งานการเปิดเลเซอร์ยากขึ้นอีกเล็กน้อย เราได้เพิ่มการอนุญาตให้กับพวงมาลัยและเลเซอร์ด้วยการเข้าสู่ระบบและรหัสผ่านผู้ดูแลระบบ/ผู้ดูแลระบบเดียวกัน
ผู้เล่นสามารถทดสอบได้โดยเปิดพวงมาลัยแล้วทำซ้ำแบบเดียวกันด้วยเลเซอร์
เราเลือกคู่ล็อกอินและรหัสผ่านที่ไม่สำคัญเพื่อไม่ให้ผู้เล่นต้องทรมานกับการเลือกที่ไม่จำเป็น
เพื่อให้งานน่าสนใจยิ่งขึ้นอีกเล็กน้อย ID อ็อบเจ็กต์จาก mongodb จึงถูกใช้เป็นตัวระบุอุปกรณ์ในห้อง
ObjectId มีการประทับเวลา: ค่าสุ่มสองค่า ค่าหนึ่งใช้ตามตัวระบุอุปกรณ์ และค่าที่สองขึ้นอยู่กับ pid ของกระบวนการที่สร้างค่านั้นและค่าตัวนับ ฉันต้องการสร้างตัวระบุที่สร้างขึ้นในช่วงเวลาปกติและด้วยกระบวนการ pid ที่แตกต่างกัน แต่ใช้ตัวนับทั่วไป เพื่อให้การเลือกตัวระบุอุปกรณ์เลเซอร์น่าสนใจยิ่งขึ้น อย่างไรก็ตาม ในท้ายที่สุด ทุกคนเริ่มต้นด้วยตัวระบุที่แตกต่างกันเพียงค่าตัวนับเท่านั้น นี่อาจทำให้ขั้นตอนง่ายเกินไป และไม่จำเป็นต้องวิเคราะห์โครงสร้าง objectId
นักแปลจากคำขอแบ็กเอนด์
สคริปต์เชื่อมต่อกับคิว RabbitMQ และถ่ายโอนคำขอจากคิวไปยัง Arduino นอกจากนี้ยังใช้ตรรกะของการสลับไฟแบบขนาน: ร่วมกับอุปกรณ์บางชนิดไฟบนอุปกรณ์เหล่านั้นก็เปิดขึ้นเช่นเมื่อจ่ายไฟให้กับเมกะตรอนในตอนแรกมันก็ส่องสว่างด้วยไฟเวที การออกแบบแสงสำหรับการถ่ายภาพยนตร์ของทั้งฉากเป็นเรื่องราวที่แยกจากกันเกี่ยวกับผลงานที่ยอดเยี่ยมของผู้อำนวยการสร้างร่วมในโครงการและผู้ออกแบบงานสร้าง Ilya Serov และเราจะเล่าเกี่ยวกับเรื่องนี้ในโพสต์แยกต่างหาก
นักแปลยังต้องรับผิดชอบต่อตรรกะของการเปิดตัวเครื่องทำลายเอกสารโดยใช้ตัวจับเวลาและส่งภาพไปยังทีวี: ตัวจับเวลาสำหรับการเปิดตัวเครื่องทำลายเอกสาร คาปิบาราที่กรีดร้อง ซึ่งเป็นโฆษณาในตอนท้ายของเกม
ตรรกะในการสร้างโทเค็น Megatron มีโครงสร้างอย่างไร
ทดสอบช็อต
โทเค็นใหม่จะถูกสร้างขึ้นทุกๆ 25 วินาที และสามารถใช้เพื่อเปิดเลเซอร์เป็นเวลา 10 วินาทีที่กำลัง 10/255 เชื่อมโยงไปยัง
จากนั้นเลเซอร์จะเย็นลงเป็นเวลา 1 นาที - ในระหว่างนี้เลเซอร์ไม่สามารถใช้งานได้และไม่ยอมรับคำขอยิงใหม่
พลังนี้ไม่เพียงพอที่จะเผาไหม้ผ่านเชือก แต่ผู้เล่นคนใดสามารถยิงเมกะทรอนและเห็นลำแสงเลเซอร์ทำงาน
อัลกอริธึมการแฮช MD5 ถูกใช้เพื่อสร้างโทเค็น และโครงการก็สำเร็จ MD5 จาก MD5 + ตัวนับ + ความลับ สำหรับโทเค็นการต่อสู้และไม่มีความลับสำหรับโทเค็นการทดสอบ
MD5 เป็นการอ้างอิงถึงโครงการเชิงพาณิชย์ที่ Pavel ซึ่งเป็นผู้สนับสนุนของเราทำ เมื่อสองสามปีก่อนโปรเจ็กต์นี้ใช้ MD5 และเมื่อเขาบอกสถาปนิกโปรเจ็กต์ว่านี่เป็นอัลกอริธึมการเข้ารหัสที่ล้าสมัย พวกเขาก็เริ่มใช้ MD5 จาก MD5 เนื่องจากเราตัดสินใจที่จะทำให้โปรเจ็กต์ noob มากที่สุดเท่าที่จะเป็นไปได้ เขาจึงจำทุกอย่างได้และตัดสินใจให้ข้อมูลอ้างอิงเล็กน้อย
ยิงต่อสู้
โหมดการต่อสู้ของเมกะตรอนคือพลังเลเซอร์ 100% ที่ 3 วัตต์ นี่เพียงพอแล้วเป็นเวลา 2 นาทีในการเผาเชือกที่รับน้ำหนักเพื่อทำลายตู้ปลาและทำให้เซิร์ฟเวอร์ท่วมด้วยน้ำ
เราได้ทิ้งคำแนะนำไว้เล็กน้อยเกี่ยวกับ Github ของโปรเจ็กต์ กล่าวคือ รหัสการสร้างโทเค็น ซึ่งใครๆ ก็สามารถเข้าใจได้ว่าโทเค็นการทดสอบและการต่อสู้นั้นถูกสร้างขึ้นโดยใช้ตัวบ่งชี้ตัวนับเดียวกัน ในกรณีของโทเค็นการต่อสู้ นอกเหนือจากค่าตัวนับแล้ว ยังมีการใช้เกลือซึ่งเกือบจะเหลืออยู่ในประวัติศาสตร์ของการเปลี่ยนแปลงส่วนสำคัญนี้ทั้งหมด ยกเว้นอักขระสองตัวสุดท้าย
เมื่อรู้ข้อมูลนี้ ก็เป็นไปได้ที่จะเรียงลำดับสัญลักษณ์เกลือ 2 ตัวสุดท้าย และพบว่ามีการใช้ตัวเลขจาก Lost ซึ่งแปลงเป็นระบบเลขฐานสิบหก
จากนั้นผู้เล่นจะต้องจับค่าตัวนับ (โดยการวิเคราะห์โทเค็นทดสอบ) และสร้างโทเค็นการต่อสู้โดยใช้ค่าตัวนับถัดไปและเกลือที่เลือกในขั้นตอนก่อนหน้า
ตัวนับจะเพิ่มขึ้นตามการทดสอบแต่ละครั้งและทุกๆ 25 วินาที เราไม่ได้เขียนเกี่ยวกับเรื่องนี้ที่ไหนเลย มันควรจะเป็นเกมเซอร์ไพรส์เล็กๆ น้อยๆ
บริการโต้ตอบแคปต์ชา
ในโลกของเกมนี่เป็น captcha แบบเดียวกับที่ต้องโหลดเพื่อเปิดพัดลมและเปิดฟลิปชาร์ตพร้อมคำใบ้ ถัดจากกล้องคือแล็ปท็อปที่มีการตรวจสอบโหลด
หากในช่วง 5 วินาทีที่ผ่านมา มีคำขอมากกว่า 50 รายการให้แสดง captcha แสดงว่าโหลดเพิ่มขึ้นตามจำนวนขั้นตอนคงที่ + สุ่ม การคำนวณคือสามารถโหลดได้ 100% ภายในสองนาที
ในความเป็นจริง การบริการมีเหตุผลมากกว่าที่แสดงในเกมสุดท้าย: เราวางจอภาพในลักษณะที่มองเห็นเฉพาะการหมุนของพัดลม CPU เท่านั้น
ในตอนเริ่มต้นของภารกิจ พวกเขาต้องการปล่อยให้ Grafan สามารถเข้าถึงได้จากเว็บไซต์ Falcon แต่ยังมีตัววัด Springboot จากรายงานแอปพลิเคชันแบ็กเอนด์ด้วย ซึ่งเราไม่มีเวลาเคลียร์ ดังนั้นเราจึงตัดสินใจบล็อกการเข้าถึง และถูกต้องแม้กระทั่งในช่วงเริ่มต้นของภารกิจ ผู้เล่นบางคนเดาว่าแอปพลิเคชันนั้นเขียนในเฟรมเวิร์ก springboot และยังขุดชื่อของบริการบางอย่างด้วย
โฮสติ้งและบัสข้อมูล
เครื่องมือสำหรับการถ่ายโอนข้อมูลจากแบ็กเอนด์ไปยังไซต์ ซึ่งเป็นเซิร์ฟเวอร์ VPS ที่ RabbitMQ ใช้งานอยู่
แบ็กเอนด์และบัสข้อมูลถูกเก็บไว้
เพื่อปกป้องเซิร์ฟเวอร์จาก DDoSa เราใช้ Cloudflare
สมควรที่จะบอกว่า VPS ยืนหยัดทุกสิ่งอย่างมีเกียรติ
Arduino ซึ่งมีหน้าที่ควบคุมรีเลย์ ได้รับคำสั่งจากผู้แปลและดำเนินการจริง
นี่เป็นหัวข้อของบทความถัดไปเกี่ยวกับส่วนฮาร์ดแวร์ของโครงการ: แบ็กเอนด์เพียงส่งคำขอเพื่อเปิดรีเลย์เฉพาะ มันเกิดขึ้นที่แบ็กเอนด์รู้จักเอนทิตีและคำขอเกือบทั้งหมดจากนั้นดูเหมือนว่า "เปิดใช้งานเอนทิตีนี้" เราทำสิ่งนี้เพื่อทดสอบไซต์ในช่วงแรก (เรายังไม่ได้ประกอบ Arduino และรีเลย์ทั้งหมด) ในที่สุดเราก็ทิ้งทุกอย่างไว้อย่างนั้น
ส่วนหน้า
เราสร้างเว็บไซต์อย่างรวดเร็วด้วยตัวหนอน ใช้เวลาหนึ่งวันทำการและช่วยเราประหยัดเงินได้ 30 ในงบประมาณของเรา
ในตอนแรก เราคิดที่จะส่งออกไซต์และเพิ่มตรรกะที่เราขาดหายไป แต่เราพบเงื่อนไขการใช้งานที่ห้ามไม่ให้เราทำเช่นนี้
เราไม่พร้อมที่จะละเมิดใบอนุญาต ดังนั้นจึงมีสองทางเลือก: ดำเนินการทุกอย่างด้วยตนเองหรือติดต่อ Tilda โดยตรง พูดคุยเกี่ยวกับโครงการและขออนุญาตในการเปลี่ยนแปลงรหัส
เราเลือกตัวเลือกที่สอง และพวกเขาไม่เพียงแต่พบกันครึ่งทางเท่านั้น แต่ยังให้บัญชีธุรกิจฟรีแก่เราหนึ่งปี ซึ่งเรารู้สึกขอบคุณพวกเขามาก การแสดงการออกแบบเว็บไซต์ของ Sokol ให้พวกเขาดูเป็นเรื่องที่น่าอึดอัดใจมาก
ด้วยเหตุนี้ เราจึงแนบตรรกะ js ไว้ที่ส่วนหน้าเพื่อส่งคำขอไปยังอุปกรณ์พื้นฐาน และเปลี่ยนรูปแบบของปุ่มสำหรับเปิดและปิดองค์ประกอบเกมเล็กน้อย
ออกแบบเว็บไซต์
ประวัติความเป็นมาของการค้นหาซึ่งคุ้มค่ากับบทที่แยกจากกัน
เราต้องการสร้างไม่เพียงแค่ไซต์ล้าสมัยเท่านั้น แต่ยังเป็นไซต์ที่น่าขยะแขยงอย่างยิ่งที่ฝ่าฝืนกฎพื้นฐานของการออกแบบทั้งหมด ในเวลาเดียวกัน สิ่งสำคัญคือต้องรักษาความน่าเชื่อถือ: ต้องไม่ทำลายเรื่องราวของ ENT แสดงให้เห็นถึงความเสแสร้งของผู้เขียน และผู้เล่นจะต้องเชื่อว่าไซต์ดังกล่าวมีอยู่จริงและนำลูกค้ามาด้วย และเขาก็นำมันมา! ในขณะที่เกมกำลังดำเนินอยู่ เราได้รับการติดต่อสองครั้งเพื่อสร้างเว็บไซต์
ในตอนแรก ฉันออกแบบด้วยตัวเอง โดยพยายามเพิ่ม GIF และองค์ประกอบที่เป็นมันเงาให้มากขึ้น แต่สามีนักออกแบบของฉันที่คบกันมา 10 ปีมองข้ามไหล่ของเขาและมองว่ามัน “ดีเกินไป” หากต้องการแหกกฎการออกแบบ คุณจำเป็นต้องรู้กฎเหล่านี้
มีการผสมสีหลายสีที่ทำให้เกิดความรู้สึกรังเกียจยาวนาน: สีเขียวและสีแดงที่มีความสมบูรณ์เท่ากัน, สีเทาและสีชมพู, สีฟ้าบวกสีน้ำตาล ในท้ายที่สุด เราก็เลือกใช้สีแดงและสีเขียวเป็นสีพื้นฐาน เพิ่ม GIF ที่มีแมว และเลือกรูปถ่ายของ Sokolov 3-4 รูปจากภาพสต็อก ฉันมีข้อกำหนดเพียงไม่กี่อย่าง: ชายวัยกลางคนที่สวมสูทที่ไม่พอดีตัวและตัวใหญ่เกินไปและอยู่ในท่า "ถ่ายภาพในสตูดิโอมืออาชีพ" ในการทดสอบพวกเขาแสดงให้เพื่อนดูและถามว่า “คุณชอบมันแค่ไหน”
ในระหว่างกระบวนการพัฒนาการออกแบบ สามีของฉันต้องนอนลงทุกๆ ครึ่งชั่วโมง เฮลิคอปเตอร์ก็เริ่มบิน Pasha พยายามเปิดคอนโซลนักพัฒนาซอฟต์แวร์ไปยังหน้าจอส่วนใหญ่ในขณะที่เขาเสร็จสิ้นส่วนหน้า - เพื่อปกป้องดวงตาของเขา
อุปกรณ์จริง
พัดลมและไฟถูกติดตั้งผ่านรีเลย์โซลิดสเตต เพื่อไม่ให้เปิดทำงานเต็มกำลังในทันที - เพื่อให้กำลังเพิ่มขึ้นควบคู่ไปกับการตรวจสอบ
แต่เราจะพูดถึงเรื่องนี้ในโพสต์หน้า เกี่ยวกับส่วนฮาร์ดแวร์ของเกมและการก่อสร้างจริงของไซต์
คอยติดตาม!
บทความอื่น ๆ เกี่ยวกับภารกิจทำลายเซิร์ฟเวอร์
เริ่มเกม เบาะแสแรก ใครเป็นคนหยุดเครื่องทำลายเอกสารหรือจำเป็นต้องทำภารกิจให้สำเร็จโดยทำลายเซิร์ฟเวอร์อย่างไร
ที่มา: will.com