2017-12-18 7 views
3

Ich programmiere ein Multiplayer-RPG-Spiel mit Unity, und in der Kampfszene muss der Spieler bestimmen, welchen Angriff er oder sie benutzt. Wenn der Spieler den Angriffsknopf drückt, sendet der Spieler eine Post-Anfrage an den Server und der Server macht die obligatorischen Überprüfungen, ob die Post-Anfrage legal ist oder nicht. Wenn die Anfrage legal ist, markiert der Server einen Datenbankwert "an", oder um genau zu sein es ist "1" von "0", das heißt beispielsweise "attack_determined".Die Überprüfung eines Datenbankwerts pro 5 Sekunden ist teuer, mit vielen Benutzerzahlen wie 10000 oder mehr?

Das Problem ist, ich muss HTTP-Anfrage erneut, um diesen Wert zu überprüfen. Es gibt maximal 6 Charaktere in einem Gefecht und wenn alle Leute überprüfen wollen, ob attack_determined 0 oder 1 ist, werden 6 Anfragen pro Angriff angefordert. Und ich möchte nicht darüber nachdenken, ob die Benutzeranzahl beispielsweise auf 10000 erhöht wird. Es wäre so schwierig, diese Anfragen für den VPS-Server, den ich verwende, zu bearbeiten. Gibt es eine Möglichkeit, die Anzahl der Anfragen zu verringern? Ich möchte keine Sockets verwenden, ich dachte daran, Sessions oder Memcache zu verwenden. Ich verwende PHP für die Serverseite und C# für die Unity-Clientseite.

+3

Dies scheint nur eine wirklich schlechte Möglichkeit, etwas interaktives zu gestalten. –

+0

Ich stimme @DavidSchwartz zu, dass du deine Architektur überdenken musst. – Eimsas

+3

Web-Sockets ist * ein geeigneter Ansatz *, wenn Sie etwas Web-ähnliches haben (das eine In-Browser-Benutzeroberfläche sein könnte, oder eine Client-Anwendung, die http anstelle eines dedizierten Socket-Protokolls verwendet). Es skaliert sehr gut für das, was Sie versuchen zu tun (und viel höher; unser Web-Socket-Server hat derzeit 450.000 offene Verbindungen). Http Umfrage alle paar Sekunden: würde uns sofort töten. Wenn Sie all Ihren anderen Traffic auf dieselbe Web-Socket kombinieren: noch besser. –

Antwort

6

Ich will nicht Steckdosen

Verwenden WebSockets verwenden.

Sie können die eigenständige Bibliothek websocket verwenden oder die Netzwerk-API von Unity verwenden und den Websocket darauf aktivieren. Wenn Sie sich für die Verwendung der Unity Network API entscheiden, können Sie dies einfach durch Setzen von NetworkServer.useWebSockets auf true aktivieren.

Einmal aktiviert, wechselt Unity vom Socket zum Websocket. Wenn Sie gerade an der WebGL-App arbeiten, können Sie sich dieses Websocket-Plugin auf der assetstore ansehen.

Verwandte Themen