సర్వర్ నాశనంతో మా లేజర్ అన్వేషణ ఎలా ఏర్పాటు చేయబడిందో మేము మీకు చెప్పడం కొనసాగిస్తున్నాము. మునుపటిలో ప్రారంభించండి
మొత్తంగా, ఆట యొక్క బ్యాకెండ్ 6 ఆర్కిటెక్చరల్ యూనిట్లను కలిగి ఉంది, వీటిని మేము ఈ కథనంలో విశ్లేషిస్తాము:
- గేమ్ మెకానిజమ్లకు బాధ్యత వహించే గేమ్ ఎంటిటీల నేపథ్యం
- VPSలో బ్యాకెండ్ మరియు సైట్ డేటా మార్పిడి బస్సు
- బ్యాకెండ్ అభ్యర్థనల (గేమ్ ఎలిమెంట్స్) నుండి Arduino మరియు సైట్లోని హార్డ్వేర్కు అనువాదకుడు
- రిలేలను నియంత్రించే బాధ్యత కలిగిన Arduino, అనువాదకుని నుండి ఆదేశాలను స్వీకరించి, అసలు పని చేసింది
- వాస్తవ పరికరాలు: ఫ్యాన్, దండలు, నేల దీపాలు మొదలైనవి.
- ఫ్రంటెండ్ - ఫాల్కన్ వెబ్సైట్ దాని నుండి ప్లేయర్లు పరికరాలను నియంత్రించారు
వాటిలో ప్రతి ఒక్కటి గుండా వెళ్దాం.
గేమ్ ఎంటిటీల నేపథ్యం
బ్యాకెండ్ స్ప్రింగ్ బూట్ అప్లికేషన్గా అమలు చేయబడింది: ఇది అనేక రెస్ట్ కంట్రోలర్లు, వెబ్సాకెట్ ఎండ్పాయింట్ మరియు గేమ్ లాజిక్తో కూడిన సేవలను కలిగి ఉంది.
మూడు నియంత్రికలు మాత్రమే ఉన్నాయి:
- మెగాట్రాన్. ప్రస్తుత Megatron పేజీ GET అభ్యర్థనల ద్వారా పంపబడింది: పవర్ ఆన్ చేయడానికి ముందు మరియు తర్వాత. POST అభ్యర్థన ద్వారా లేజర్ తొలగించబడింది.
- టిల్డే పేజీలను మ్యాపింగ్ చేయడం వలన అవి పేజీ పేరుతో అందించబడతాయి. Tilde ఎగుమతి కోసం పేజీలను అసలు పేర్లతో కాకుండా అంతర్గత ID మరియు సమ్మతి సమాచారంతో ఉత్పత్తి చేస్తుంది.
- సూడో-హై-లోడ్ సర్వర్ క్యాప్చాను అందించడానికి Captcha కంట్రోలర్.
గాడ్జెట్లను నియంత్రించడానికి వెబ్సాకెట్ ఎండ్పాయింట్ ఉపయోగించబడింది: దీపాలు, దండలు మరియు అక్షరాలు. పరికరం యొక్క ప్రస్తుత స్థితిని ప్లేయర్లందరికీ సమకాలీకరించడానికి ఇది ఎంచుకోబడింది: ఇది ఆన్ లేదా ఆఫ్లో ఉన్నా, సక్రియంగా లేదా లేకపోయినా, ప్రస్తుతం గోడపై అక్షరం యొక్క రంగు ఏ రంగులో వెలిగించబడిందో. లేజర్ను ఆన్ చేసే పనిని కొంచెం కష్టతరం చేయడానికి, మేము అదే లాగిన్ మరియు పాస్వర్డ్ అడ్మిన్/అడ్మిన్తో గార్లాండ్ మరియు లేజర్కు అధికారాన్ని జోడించాము.
ఆటగాళ్ళు దండను ఆన్ చేయడం ద్వారా దాన్ని పరీక్షించవచ్చు మరియు లేజర్తో అదే పునరావృతం చేయవచ్చు.
అనవసరమైన ఎంపికతో ఆటగాళ్లను వేధించకుండా ఉండేందుకు మేము అటువంటి అల్పమైన లాగిన్-పాస్వర్డ్ జతని ఎంచుకున్నాము.
టాస్క్ను మరింత ఆసక్తికరంగా చేయడానికి, mongodb నుండి ఆబ్జెక్ట్ IDలు గదిలో పరికర ఐడెంటిఫైయర్లుగా ఉపయోగించబడ్డాయి.
ObjectId టైమ్స్టాంప్ను కలిగి ఉంది: రెండు యాదృచ్ఛిక విలువలు, వాటిలో ఒకటి పరికర ఐడెంటిఫైయర్ ఆధారంగా తీసుకోబడుతుంది మరియు రెండవది దానిని ఉత్పత్తి చేసే ప్రక్రియ యొక్క పిడ్ మరియు కౌంటర్ విలువపై ఆధారపడి ఉంటుంది. నేను ఐడెంటిఫైయర్లను క్రమ వ్యవధిలో మరియు విభిన్న పిడ్ ప్రాసెస్లతో రూపొందించాలనుకుంటున్నాను, కానీ సాధారణ కౌంటర్తో, లేజర్ పరికర ఐడెంటిఫైయర్ ఎంపిక మరింత ఆసక్తికరంగా ఉంటుంది. అయితే, చివరికి, ప్రతి ఒక్కరూ కౌంటర్ విలువలో మాత్రమే తేడా ఉన్న ఐడెంటిఫైయర్లతో ప్రారంభించారు. ఇది దశను చాలా సులభతరం చేసి ఉండవచ్చు మరియు objectId నిర్మాణం యొక్క విశ్లేషణ అవసరం లేదు.
బ్యాకెండ్ అభ్యర్థనల నుండి అనువాదకుడు
స్క్రిప్ట్ RabbitMQ క్యూకి కనెక్ట్ చేయబడింది మరియు క్యూ నుండి Arduinoకి అభ్యర్థనలను బదిలీ చేసింది. ఇది సమాంతర కాంతి స్విచింగ్ యొక్క తర్కాన్ని కూడా అమలు చేసింది: కొన్ని పరికరాలతో కలిసి, వాటిపై కాంతి ఆన్ చేయబడింది, ఉదాహరణకు, మెగాట్రాన్కు శక్తిని మొదట్లో సరఫరా చేసినప్పుడు, అది స్టేజ్ లైట్తో ప్రకాశిస్తుంది. మొత్తం సన్నివేశం యొక్క సినిమాటోగ్రఫీ కోసం లైటింగ్ డిజైన్ మా ప్రాజెక్ట్ సహ-నిర్మాత మరియు ప్రొడక్షన్ డిజైనర్ ఇలియా సెరోవ్ యొక్క గొప్ప పని గురించి ఒక ప్రత్యేక కథ, మరియు మేము దాని గురించి ప్రత్యేక పోస్ట్లో తెలియజేస్తాము.
టైమర్ను ఉపయోగించి ష్రెడర్ను ప్రారంభించడం మరియు చిత్రాన్ని టీవీకి ప్రసారం చేయడం వంటి లాజిక్కు కూడా అనువాదకుడు బాధ్యత వహిస్తాడు: ష్రెడర్ను లాంచ్ చేయడానికి టైమర్, కేకలు వేసే కాపిబారా, గేమ్ చివరిలో వాణిజ్య ప్రకటన.
మెగాట్రాన్ టోకెన్ను రూపొందించడానికి లాజిక్ ఎలా రూపొందించబడింది
టెస్ట్ షాట్
ప్రతి 25 సెకన్లకు ఒక కొత్త టోకెన్ ఉత్పత్తి చేయబడుతుంది మరియు 10/10 శక్తితో 255 సెకన్ల పాటు లేజర్ను ఆన్ చేయడానికి ఉపయోగించవచ్చు. దీనికి లింక్ చేయండి
లేజర్ తర్వాత 1 నిమిషం చల్లబడింది - ఈ సమయంలో అది అందుబాటులో లేదు మరియు కొత్త షాట్ అభ్యర్థనలను అంగీకరించలేదు.
ఈ శక్తి తాడు ద్వారా కాల్చడానికి సరిపోదు, కానీ ఏ ఆటగాడైనా మెగాట్రాన్ను కాల్చి, లేజర్ పుంజం చర్యలో చూడగలడు.
టోకెన్ను రూపొందించడానికి MD5 హ్యాషింగ్ అల్గోరిథం ఉపయోగించబడింది. మరియు పథకం పని చేసింది MD5 + కౌంటర్ + రహస్యం నుండి MD5 పోరాట టోకెన్ కోసం మరియు టెస్ట్ టోకెన్ కోసం రహస్యం లేకుండా.
MD5 అనేది మా బ్యాకెండర్ అయిన పావెల్ చేసిన వాణిజ్య ప్రాజెక్ట్కి సూచన. కొన్ని సంవత్సరాల క్రితం ఈ ప్రాజెక్ట్ MD5ని ఉపయోగించింది మరియు ఇది పాత ఎన్క్రిప్షన్ అల్గోరిథం అని ప్రాజెక్ట్ ఆర్కిటెక్ట్కి చెప్పినప్పుడు, వారు MD5 నుండి MD5ని ఉపయోగించడం ప్రారంభించారు. మేము మోస్ట్ నూబ్ ప్రాజెక్ట్ను సాధ్యం చేయాలని నిర్ణయించుకున్నాము కాబట్టి, అతను ప్రతిదీ గుర్తుంచుకున్నాడు మరియు చిన్న సూచన చేయాలని నిర్ణయించుకున్నాడు.
పోరాట షాట్
Megatron యొక్క పోరాట మోడ్ 100 వాట్స్ వద్ద 3% లేజర్ పవర్. బరువును పట్టుకున్న తాడు ద్వారా కాల్చడానికి, అక్వేరియంను విచ్ఛిన్నం చేయడానికి మరియు సర్వర్ను నీటితో నింపడానికి ఇది 2 నిమిషాలు సరిపోతుంది.
మేము ప్రాజెక్ట్ యొక్క గితుబ్పై కొన్ని సూచనలను వదిలివేసాము: అవి, టోకెన్ జనరేషన్ కోడ్, దీని నుండి పరీక్ష మరియు పోరాట టోకెన్లు ఒకే కౌంటర్ సూచిక ఆధారంగా రూపొందించబడతాయని అర్థం చేసుకోవచ్చు. పోరాట టోకెన్ విషయంలో, కౌంటర్ విలువతో పాటు, ఉప్పు కూడా ఉపయోగించబడుతుంది, ఇది చివరి రెండు అక్షరాలను మినహాయించి, ఈ సారాంశాన్ని మార్చే చరిత్రలో దాదాపు పూర్తిగా మిగిలిపోయింది.
ఈ డేటాను తెలుసుకోవడం, ఉప్పు యొక్క చివరి 2 చిహ్నాల ద్వారా క్రమబద్ధీకరించడం సాధ్యమైంది మరియు వాస్తవానికి హెక్సాడెసిమల్ సిస్టమ్కి మార్చబడిన లాస్ట్ నుండి సంఖ్యలు ఉపయోగించబడిందని కనుగొనడం సాధ్యమైంది.
అప్పుడు ఆటగాళ్ళు కౌంటర్ విలువను పట్టుకోవాలి (పరీక్ష టోకెన్ను విశ్లేషించడం ద్వారా) మరియు తదుపరి కౌంటర్ విలువను మరియు మునుపటి దశలో ఎంచుకున్న ఉప్పును ఉపయోగించి పోరాట టోకెన్ను రూపొందించాలి.
ప్రతి టెస్ట్ షాట్ మరియు ప్రతి 25 సెకన్లతో కౌంటర్ కేవలం పెరుగుతుంది. మేము దీని గురించి ఎక్కడా వ్రాయలేదు, ఇది ఒక చిన్న ఆట ఆశ్చర్యంగా భావించబడింది.
క్యాప్చా ఇంటరాక్షన్ సర్వీస్
గేమింగ్ ప్రపంచంలో, ఫ్యాన్ను ఆన్ చేయడానికి మరియు సూచనతో ఫ్లిప్చార్ట్ను తెరవడానికి ఇదే క్యాప్చా లోడ్ చేయవలసి ఉంటుంది. కెమెరా పక్కన లోడ్ మానిటరింగ్తో కూడిన ల్యాప్టాప్ ఉంది.
క్యాప్చాను ప్రదర్శించడానికి గత 5 సెకన్లలో 50 కంటే ఎక్కువ అభ్యర్థనలు ఉంటే, అప్పుడు లోడ్ స్థిర + యాదృచ్ఛిక దశల సంఖ్యతో పెరిగింది. రెండు నిమిషాల్లో 100% లోడ్ సాధించవచ్చని లెక్క.
వాస్తవానికి, చివరి గేమ్లో ప్రదర్శించబడిన దానికంటే సేవలో ఎక్కువ లాజిక్ ఉంది: మేము మానిటర్ను CPU ఫ్యాన్ యొక్క భ్రమణం మాత్రమే కనిపించే విధంగా ఉంచాము.
అన్వేషణ ప్రారంభంలో వారు ఫాల్కన్ వెబ్సైట్ నుండి గ్రాఫాన్ను యాక్సెస్ చేయగలిగేలా వదిలివేయాలని కోరుకున్నారు. కానీ ఇది బ్యాకెండ్ అప్లికేషన్ రిపోర్ట్ నుండి స్ప్రింగ్బూట్ మెట్రిక్లను కూడా కలిగి ఉంది, దానిని క్లియర్ చేయడానికి మాకు సమయం లేదు, కాబట్టి మేము దానికి యాక్సెస్ని బ్లాక్ చేయాలని నిర్ణయించుకున్నాము. మరియు సరిగ్గా - అన్వేషణ ప్రారంభంలో కూడా, కొంతమంది ఆటగాళ్ళు అప్లికేషన్ స్ప్రింగ్బూట్ ఫ్రేమ్వర్క్లో వ్రాయబడిందని ఊహించారు మరియు కొన్ని సేవల పేర్లను కూడా తవ్వారు.
హోస్టింగ్ మరియు డేటా బస్
బ్యాకెండ్ నుండి సైట్కి సమాచారాన్ని బదిలీ చేయడానికి ఒక సాధనం, RabbitMQ నడుస్తున్న VPS సర్వర్.
బ్యాకెండ్ మరియు డేటా బస్ ఆన్లో ఉంచబడ్డాయి
DDoSa నుండి సర్వర్ను రక్షించడానికి, మేము Cloudflareని ఉపయోగించాము.
VPS ప్రతిదాన్ని గౌరవంగా ఎదుర్కొందని చెప్పడం విలువ.
రిలేలను నియంత్రించే బాధ్యత కలిగిన Arduino, అనువాదకుని నుండి ఆదేశాలను స్వీకరించి, అసలు పని చేసింది
ప్రాజెక్ట్ యొక్క హార్డ్వేర్ భాగం గురించి తదుపరి కథనం యొక్క అంశం ఇది: బ్యాకెండ్ నిర్దిష్ట రిలేను ఆన్ చేయడానికి అభ్యర్థనలను పంపింది. బ్యాకెండ్కి దాదాపు అన్ని ఎంటిటీలు తెలుసు మరియు దాని నుండి వచ్చిన అభ్యర్థనలు "ఈ ఎంటిటీని ఆన్ చేయి" లాగా కనిపించాయి. మేము సైట్ యొక్క ప్రారంభ పరీక్ష కోసం దీన్ని చేసాము (మేము ఇంకా అన్ని Arduino మరియు రిలేలను సమీకరించలేదు), చివరికి మేము అలాంటి ప్రతిదాన్ని వదిలివేసాము.
ఫ్రంటెండ్
మేము టిల్డేలో సైట్ను త్వరగా సృష్టించాము, దీనికి ఒక పని దినం పట్టింది మరియు మా బడ్జెట్లో మాకు 30 వేలు ఆదా చేసింది.
ప్రారంభంలో, మేము సైట్ను ఎగుమతి చేయడం మరియు మేము కోల్పోయిన లాజిక్ను జోడించడం గురించి ఆలోచించాము, కానీ మేము దీన్ని చేయకుండా నిషేధించే ఉపయోగ నిబంధనలలోకి ప్రవేశించాము.
మేము లైసెన్స్ను ఉల్లంఘించడానికి సిద్ధంగా లేము, కాబట్టి రెండు ఎంపికలు ఉన్నాయి: అన్నింటినీ స్వయంగా అమలు చేయడం లేదా టిల్డాను నేరుగా సంప్రదించడం, ప్రాజెక్ట్ గురించి మాట్లాడటం మరియు కోడ్ను మార్చడానికి అనుమతి అడగడం.
మేము రెండవ ఎంపికను ఎంచుకున్నాము మరియు వారు మమ్మల్ని సగంలోనే కలవడమే కాకుండా, మాకు ఒక సంవత్సరం ఉచిత వ్యాపార ఖాతాను కూడా ఇచ్చారు, దాని కోసం మేము వారికి చాలా కృతజ్ఞతలు. వారికి సోకోల్ వెబ్సైట్ డిజైన్ని చూపించడం చాలా ఇబ్బందికరంగా ఉంది.
ఫలితంగా, మేము ప్రాథమిక పరికరాలకు అభ్యర్థనలను పంపడానికి ఫ్రంటెండ్కు js లాజిక్ని జోడించాము మరియు గేమ్ ఎలిమెంట్లను ఆన్ మరియు ఆఫ్ చేయడానికి బటన్ల స్టైల్లను కొద్దిగా మార్చాము.
వెబ్సైట్ డిజైన్
శోధనల చరిత్ర, ప్రత్యేక అధ్యాయం విలువైనది.
మేము పాత-కాలపు సైట్ను మాత్రమే కాకుండా, డిజైన్ యొక్క అన్ని ప్రాథమిక నియమాలను ఉల్లంఘించే పూర్తిగా అసహ్యకరమైనదాన్ని సృష్టించాలనుకుంటున్నాము. అదే సమయంలో, విశ్వసనీయతను కాపాడుకోవడం చాలా ముఖ్యం: ఇది ENT కథనాన్ని విచ్ఛిన్నం చేయకూడదు, రచయిత యొక్క డాంబికతను ప్రదర్శించాలి మరియు అలాంటి సైట్ ఉనికిలో ఉందని మరియు క్లయింట్లను కూడా తీసుకురాగలదని ఆటగాళ్ళు విశ్వసించవలసి ఉంటుంది. మరియు అతను దానిని తీసుకువచ్చాడు! గేమ్ జరుగుతున్నప్పుడు, వెబ్సైట్లను రూపొందించడానికి మమ్మల్ని రెండుసార్లు సంప్రదించారు.
మొదట నేనే డిజైన్ చేసాను, మరిన్ని gif లు మరియు మెరిసే అంశాలను చేర్చడానికి ప్రయత్నిస్తున్నాను. కానీ 10 సంవత్సరాల నా డిజైనర్ భర్త అతని భుజం మీదుగా చూసి "చాలా బాగుంది" అని కొట్టిపారేశాడు. డిజైన్ నియమాలను ఉల్లంఘించడానికి, మీరు వాటిని తెలుసుకోవాలి.
అసహ్యం యొక్క శాశ్వత అనుభూతిని కలిగించే అనేక రంగు కలయికలు ఉన్నాయి: ఆకుపచ్చ మరియు ఎరుపు సమానమైన గొప్పతనాన్ని, బూడిద మరియు గులాబీ, నీలం మరియు గోధుమ రంగు. చివరికి, మేము ఎరుపు మరియు ఆకుపచ్చ రంగులను బేస్ కలర్స్గా సెట్ చేసాము, పిల్లితో gif లను జోడించాము మరియు స్టాక్ ఫోటో నుండి సోకోలోవ్ యొక్క 3-4 ఫోటోలను ఎంచుకున్నాము. నాకు కొన్ని అవసరాలు మాత్రమే ఉన్నాయి: ఒక మధ్య వయస్కుడైన వ్యక్తి, చాలా పెద్దగా సరిపోయే సూట్ని ధరించి, "ప్రొఫెషనల్ స్టూడియో ఫోటో షూట్" భంగిమలో ఉన్నాడు. పరీక్ష కోసం, వారు దానిని స్నేహితులకు చూపించారు మరియు "మీకు ఇది ఎలా నచ్చింది?"
డిజైన్ డెవలప్మెంట్ ప్రక్రియలో, నా భర్త ప్రతి అరగంటకు పడుకోవలసి ఉంటుంది; హెలికాప్టర్ ఎగరడం ప్రారంభించింది. పాషా తన కళ్లను రక్షించుకోవడానికి ఫ్రంటెండ్ని పూర్తి చేస్తున్నప్పుడు స్క్రీన్లో చాలా వరకు డెవలపర్ కన్సోల్ను తెరవడానికి ప్రయత్నించాడు.
వాస్తవ పరికరాలు
ఫ్యాన్లు మరియు లైట్లు సాలిడ్-స్టేట్ రిలేల ద్వారా మౌంట్ చేయబడ్డాయి, తద్వారా అవి పూర్తి శక్తితో వెంటనే ఆన్ చేయబడవు - తద్వారా పర్యవేక్షణకు సమాంతరంగా శక్తి పెరుగుతుంది.
కానీ మేము దీని గురించి తదుపరి పోస్ట్లో, ఆట యొక్క హార్డ్వేర్ భాగం మరియు సైట్ యొక్క వాస్తవ నిర్మాణం గురించి మాట్లాడుతాము.
వేచి ఉండండి!
సర్వర్ను నాశనం చేయాలనే తపన గురించి ఇతర కథనాలు
మూలం: www.habr.com