Servera izmaksas - $5 mēnesī, maximālais spēlētāju skaits - 666

Doties atpakaļ
Ielogoties Lai atbildētu tēmā, ielogojies !

Tā kā mana spēle ir paredzēta online, kur iespējams saspēlēt vien un to pašu spēli no 2 vai vairāk datoriem, man ļoti svarīga lieta bija izdomāt un izstrādāt serveri priekš spēles klienta, tā lai savienojums ir ļoti gluds un nekas neraustās, neķerās un kopumā viss kustās ļoti precīzi un ātri. Lai ko tādu nodrošinātu, vajadzīgs jaudīgi serveri utt. Šajā gadījumā es izveidoju digitalocean.com dropletu, kas ir virtuālais serveris pa $5 mēnesī. Ar tādu man pilnīgi pietiek, lai nodrošinātu ļoti aptuveni un tīri teorētiski - 666 spēlētājus vienā serverī. Protams es tik daudz neesmu ielaidis cilvēkus, bet 2 spēlētājus serverī esmu jau iztestējis, maximālā cpu noslodze bija 0.3%, tad tālāk sarēķinot uz 100% sanāk 666 spēlētāji. Kā es to panācu ? Ļoti vienkārši! Atbilde slēpjas socket.io. Uz socket.io un node.js bāzes uzbūvēju parastu serveri, kurš pieņem datus un izdod datus, saglabā username sessijā un tas arī viss, pagaidām man ar to pietiek, vēlāk saslēgšu ar datubāzi un spēlētāji varēs veidot profilus.

Labi, serveris ir gatavs, vajag panākt to, lai serverim var pieslēgties un klients tad savā starpā apmainīties ar datiem starp abām pusēm. Šeit nāca talkā websocket-sharp.dll, kuru implementēju savā servera konekcijas kodā. Šis mazais dll man atļāva izmantot socket.io dotās iespējas spēles editorā (Unity 3D). Un spēju sarunāties ar serveri no spēles vides - vienkāršu ziņu padevu serverim un servera pusē, ja tā ziņa ir saņemta, tad man atnāk atpakaļ ziņa no servera, ka savienojums ir izdevies.

Attēla apraksts

Protams tagad parādījās ļoti milzīgais jautājums kā tad īsti nodrošināt savienojumu starp 2 spēlētājiem, no 2 dažādiem datoriem. Viena no manām idejām bija, ka tiek caur serveri pārsūtīti spēlētāja spiestās pogas, kurstinot spēles varoni pa karti, kas likās diezgan musarā metama ideja, jo atliek tikai noraustīties internetam un visas tālākās kustības jau rādīsies citiem pilnīgi nepatiesas. Vislabākais variants likās izveidot varoņa koordinātu sūtīšana, ņemot vērā brīdi, kad varonis tiek kustināts pa karti. Ja spēlētājs stāvēs idle, serveris ar viņu uzturēs tikai minimālu konekciju, lai gluži vienkārši nepārtrauktos sessija. Tad nu to arī izveidoju un sapratu, ka noteikti vajag ielikt kaut kādu laika intervālu, kurā tad izsūta koordinātes, jo ja visu laiku sūta koordinātes un baksta serveri, tad sanāk papildus slodze un man tajā brīdī likās lieka padarīšana. Pēc vairākām stundām biju atdūries pret problēmu, ka manis izveidotais laika intervāls 0.5s ir pārāk lēns, lai gludi zīmētu citu spēlētāju manevrus pa spēles karti.

Attēla apraksts

Arī šeit ir elementārs atrisinājums! Izsūtot koordinātes, es izsūtu papildus precīzu laika sprīdi, kurš ir pagājis no iepriekšējās izsūtīšanas, jo tur var būt 0.51252s vai 0.59328, atšķirība ir! Tāpēc man tas ir jāsūta kā papildus vērtība. Šī visa informācija nonāk līdz serverim un tad no servera tālāk citiem spēlētājiem un šeit notiek tā "maģija", kas man ieekonomēja servera resursus. Tā kā man ir zināma varoņa iepriekšējā atrašanās vieta un no servera tiek atsūtīta jauna. Tātad es zinu koordinātes punktam A un punktam B un arī zinu precīzu laiku, kurā šis attālums tika veikts. Ar komandu Vector3.SmoothDamp(); es varu ievadīt visas šīs man zināmās vērtības un uztaisīt animāciju attiecīgā ātrumā, kas atkarīgs no tā laika sprīža. Gala rezultātā serverim liela atslodze un spēlētājam joprojām ir šie patīkamie, gludie manevri no citiem spēlētājiem, aizmirstam par ķeršanos, lagiem utt.

Attēla apraksts

Kā jau pēc gif bildēm var redzēt, ka atšķirība ir fenomenāla, servera noslogojums abos variantos ir identisks. Tik tālu esmu ticis ar servera izveidi, kā redzams - pamats ir diezgan teicams. Mani ļoti apmierina servera izmaksas, konekcijas ātrums un teorētiskais spēlētāju skaits uz vienu serveri. Vēlāk nāksies pievienot protams arī dažādas citas vērtības, kas tiks sūtītas, bet tās tiks sūtītas reizē ar koordinātēm, kas servera noslodzi īpaši nemainīs, kā piemēram, varoņa skatīšanās virziens (rotācija), animācijas, kuras var mierīgi izrēķināt klienta pusē, tur pat nav nepieciešams tās sūtīt caur serveri. Nākošais plāna punkts ir tikt galā ar rotāciju un animāciju.

Ierakstu labojaEdgarsdesign7.Augusts 2015 07:32

Mans mazais signature ^^

Iedod kādu pieeju šai spēlei, būtu interesanti patestēt.

Pagaidām īsti negribās nekur publicēt, jo tur nav ko "spēlēt" Es domāju kad sasniegšu kādu spēlējamu variantu, iedošu paspēlēties un izteikt savu viedokli

Mans mazais signature ^^

Johaidī, you are my new best friend! Jo es pāris nedēļas daru ko līdzīgu. Mēģinu visu stellēt uz Three.js bāzes, ar animētiem un importētiem modeļiem no Blendera. Sataisīju kameru, collision sistēmu un pašlaik pārslēdzos uz to, ka jāmēģina tas viss dabūt multiplayer stilā. Arī sapratu, ka tur būs ar node un socketiem jāņemās. Work in progress. Anyway - liels prieks zināt kādu, kas nodarbojas ar ko līdzīgu! ^^

Yeah, ir diezgan forša štelle ar node strādāt un priekš servera cool lietiņa, bet es node priekš spēles servera izmantošu tagad laikam tikai testa versijā, pēc tam jāskatās kaut kas cits uz kā bāzēt, jo tomēr websocketi nav tas ko vajadzētu manā gadījumā. Tev tas būtu tieši laikā, ja reiz spēle ir webiski bāzēta Vari arī iemest kādu progresu par savu spēli.

Mans mazais signature ^^

Būtu interesanti, ja būtu skini cilvēciņiem.

Būtu interesanti, ja būtu skini cilvēciņiem.

To jau jāveido tikai tad, kad pati spēles sistēma ir izveidota

Ierakstu labojaEdgarsdesign7.Augusts 2015 07:33

Būtu interesanti, ja būtu skini cilvēciņiem.

Yeah būs, varēs modificēt cilvēciņus visādi, arī drēbes likt virsū, par to vairāk ir pastāstīts manā otrā foruma ierakstā, kur runāju par animāciju veidošanu Pagaidām viss pliki izskatās, jo tas ir ļooti agrīnā stadijā viss.

Ierakstu labojaEdgarsdesign7.Augusts 2015 07:33

Mans mazais signature ^^

Kā man patīk paša izveidotas spēles, ceru ka būs kādu dienu iespēja arī mums mirstīgajiem šo 'zvēru' izstestēt!

Kā man patīk paša izveidotas spēles, ceru ka būs kādu dienu iespēja arī mums mirstīgajiem šo 'zvēru' izstestēt!

Noteikti laidīšu līdz galam, nezinu tikai kad varētu būt pieejama spēlējama versija

Ierakstu labojaEdgarsdesign7.Augusts 2015 07:33

Mans mazais signature ^^

Ielogoties Lai atbildētu tēmā, ielogojies !
Atpakaļ uz augšu Tēmai ir 9 atbildes  •  Kopumā lasīta 1683 reizes