コンテンツにスキップ

Creating online multiplayer servers for 6 players

このコンテンツはまだ日本語訳がありません。

💡 Struggling with multiplayer networking? Need help with server architecture? 🚀 Get Expert Help

MD

MultiplayerDev_Alex

Posted on January 22, 2024 • Advanced

🌐 Need help creating multiplayer servers for 6 players

Hey everyone! I’m working on an online multiplayer game and I want to create a server system that can handle exactly 6 players per server. I’ve heard that cloud variables can support multiple players, but I’m not sure how to:

  • Create separate server instances
  • Limit each server to 6 players maximum
  • Handle player connections and disconnections
  • Manage game state across multiple servers

I’m relatively new to cloud engines and multiplayer programming. Any detailed explanations with code examples would be incredibly helpful! 🙏

NE

NetworkExpert_Sam

Replied 3 hours later • ⭐ Best Answer

Excellent question @MultiplayerDev_Alex! Creating server-based multiplayer systems is definitely advanced, but totally doable. Here’s a comprehensive guide:

🏗️ Server Architecture Overview

Here’s how the server system works:

flowchart TD A[🎮 Player Joins] --> B{Check Available Servers} B -->|Server Found| C[Join Existing Server] B -->|No Server| D[Create New Server] C --> E[Update Player Count] D --> F[Initialize Server Data] E --> G{Server Full?} F --> H[Set Server ID] G -->|Yes - 6 Players| I[🔒 Lock Server] G -->|No| J[🟢 Accept More Players] H --> K[Assign Player Slot] I --> L[Start Game Session] J --> K K --> M[🎯 Game Loop] M --> N{Player Disconnects?} N -->|Yes| O[Free Player Slot] N -->|No| M O --> P{Server Empty?} P -->|Yes| Q[🗑️ Delete Server] P -->|No| R[🟢 Accept New Players] Q --> S[Clean Up Data] R --> J style A fill:#e1f5fe style D fill:#f3e5f5 style I fill:#ffebee style L fill:#e8f5e8 style Q fill:#fff3e0

🔧 Step 1: Server Management System

First, create variables to manage multiple servers:

    when flag clicked
set [Server Count v] to [0]
set [My Server ID v] to [0]
set [My Player Slot v] to [0]
set [Max Players Per Server v] to [6]
forever
broadcast [update servers v]
wait [1] seconds
end
  

🌐 Step 2: Server Discovery and Joining

Create a system to find available servers:

    when I receive [join game v]
set [Server Found v] to [false]
set [Current Server Check v] to [1]
repeat until <(Server Found) = [true]>
set [Server Players v] to (☁ Server (Current Server Check) Players)
if <<(Server Players) > [0]> and <(Server Players) < [6]>> then
set [My Server ID v] to (Current Server Check)
set [Server Found v] to [true]
broadcast [join existing server v]
else
if <(Current Server Check) > (Server Count)> then
change [Server Count v] by [1]
set [My Server ID v] to (Server Count)
set [Server Found v] to [true]
broadcast [create new server v]
else
change [Current Server Check v] by [1]
end
end
end
  

🏗️ Step 3: Server Creation and Player Assignment

Handle new server creation and player slot assignment:

    when I receive [create new server v]
set [☁ Server (My Server ID) Players v] to [1]
set [☁ Server (My Server ID) Player1 v] to (username)
set [My Player Slot v] to [1]
broadcast [server created v]

when I receive [join existing server v]
set [Current Players v] to (☁ Server (My Server ID) Players)
change [Current Players v] by [1]
set [☁ Server (My Server ID) Players v] to (Current Players)
set [My Player Slot v] to (Current Players)
set [☁ Server (My Server ID) Player(My Player Slot) v] to (username)
broadcast [joined server v]
  

🎮 Step 4: Game State Synchronization

Sync player positions and game data within each server:

    // Player position updates
when I receive [update position v]
set [☁ Server (My Server ID) P(My Player Slot) X v] to (x position)
set [☁ Server (My Server ID) P(My Player Slot) Y v] to (y position)
set [☁ Server (My Server ID) P(My Player Slot) Action v] to (current action)

// Read other players' data
when I receive [update other players v]
set [Player Num v] to [1]
repeat (☁ Server (My Server ID) Players)
if <not <(Player Num) = (My Player Slot)>> then
set [Other X v] to (☁ Server (My Server ID) P(Player Num) X)
set [Other Y v] to (☁ Server (My Server ID) P(Player Num) Y)
set [Other Action v] to (☁ Server (My Server ID) P(Player Num) Action)
broadcast [update player (Player Num) sprite v]
end
change [Player Num v] by [1]
end
  

🚪 Step 5: Disconnect Handling

Clean up when players leave:

    when I receive [player disconnect v]
set [☁ Server (My Server ID) P(My Player Slot) X v] to [0]
set [☁ Server (My Server ID) P(My Player Slot) Y v] to [0]
set [☁ Server (My Server ID) Player(My Player Slot) v] to []
change [☁ Server (My Server ID) Players v] by [-1]
if <(☁ Server (My Server ID) Players) = [0]> then
set [☁ Server (My Server ID) Players v] to [0]
broadcast [server cleanup v]
end
  

⚡ Step 6: Optimization Tips

To reduce lag and improve performance:

  • Update frequency: Don’t update cloud variables every frame - use timers
  • Data compression: Combine multiple values into single cloud variables
  • Priority updates: Update critical data (positions) more frequently than non-critical data
  • Server cleanup: Regularly clean up empty servers to free cloud variable space
    // Optimized update system
when flag clicked
forever
broadcast [high priority update v] // Positions, actions
wait [0.1] seconds
broadcast [medium priority update v] // Health, scores
wait [0.2] seconds
broadcast [low priority update v] // Chat, status
wait [0.5] seconds
end
  

This system efficiently manages up to 6 players per server while keeping network traffic manageable! 🚀

MD

MultiplayerDev_Alex

Replied 45 minutes later

@NetworkExpert_Sam This is absolutely incredible! Thank you so much! 🎉

I implemented the basic server discovery and it’s working perfectly. One question - how do I handle the case where a player’s connection drops unexpectedly? Should I use a heartbeat system?

NE

NetworkExpert_Sam

Replied 1 hour later

@MultiplayerDev_Alex Great question! Yes, a heartbeat system is essential for robust multiplayer:

    // Heartbeat system
when flag clicked
forever
set [☁ Server (My Server ID) P(My Player Slot) Heartbeat v] to (timer)
wait [2] seconds
end

// Check for disconnected players
when I receive [check disconnects v]
set [Player Check v] to [1]
repeat (☁ Server (My Server ID) Players)
set [Last Heartbeat v] to (☁ Server (My Server ID) P(Player Check) Heartbeat)
if <((timer) - (Last Heartbeat)) > [10]> then
broadcast [player (Player Check) disconnected v]
end
change [Player Check v] by [1]
end
  

This checks every 2 seconds and considers a player disconnected if no heartbeat for 10 seconds. Much more reliable! 👍

VB

Vibelf_Community

Pinned Message • Moderator

🚀 Ready to Build Advanced Multiplayer Games?

Fantastic discussion on server architecture! For those looking to create even more sophisticated multiplayer systems, our community can help you implement:

  • 🏆 Matchmaking systems
  • 🎖️ Real-time chat systems
  • 🧮 Anti-cheat mechanisms
  • 🔓 Cross-server communication

📚 Related Discussions

Ready to master multiplayer game development? Get expert guidance from our specialized tutors in the Vibelf app!