ProudNet Guide Site

Mmorpg server programming

  • 1. Proven performance & reliability

    1. Proven performance & reliability

    Proven performance and reliability
    in various countries and environments


    • ProudNet based servers in operation in more than 13 countries(Korea, China, Japan, America, Hong Kong, Singapore, Malaysia, Germany, Netherlands, Taiwan, Vietnam, France)
    • Introduced by various genres such as MMORPG, FPS, action, sports, racing, etc.
    • Used in mobile game areas such as Raven, Creature Academy, Seven Knights, etc.
    • Used in on-line game areas such as vindictus, Hero Warz, S4 League, War of Mirrors, Closers, etc.
    • Used in 190 PC on-line, mobile and PlayStation 4 games.
    • Single MMORPG server successfully accommodating 13,000 simultaneously logged-on players.
    • Direct P2P Upkeep (China: 82%, Europe:80%, Southeast Asia:84%, Korea:96%)
    • Direct and relayed P2P Upkeep of 100% in China.
    • MMORPG Siege warfare stability 98% (Server: Shanhai, Client: Szechuan)

  • 2. Development and Operation in Various Environments

    2. Development and Operation in Various Environments

    Supports various platforms and languages



    • C++, C#
    • Windows, Linux


    • C++, C#, Java
    • Windows, Linux, iOS, Android, PS 4
    • Unity, Cocos2d-x, Unreal Engine 3, 4

  • 3. High performance server

    3. High performance server

    Thread Pool that uses multi-core to the maximum

    • It processes various events occurring simultaneously in parallel using thread pool.
    • Thread Pool is divided into two uses; for internal networks and user callback, which can prevent network bottlenecks created by user mistakes.
    • If you want, one thread pool can be used commonly or thread pool will not be used at all; flexible customizing is possible.

    Use efficient I/O strategy

    • I/O operation, which is much slower compared to internal calculation, must be performed more carefully and smartly.
    • When performing multicasting, sometimes it is better to do routing using P2P information without the server performs transmission individually. In case of messaging, this feature can be selected for use.
    • Data such as the location information of a gamer is valid only for the latest value. If the latest data and previous data exist in the Send Queue, it is advantageous to ignore the previous data and send the latest data. If the Unique ID feature of ProudNet is activated during messaging, it performs on its own internally by recognizing it.

    Other various efforts

    • Minimum kernel-user mode Conversion
      In a server OS, kernel-user mode conversion is needed for handling TCP and UDP packets. This is a high cost process and causes a negative effect in server performance. ProudNet makes a conscious effort in minimizing this to maximize performance.
    • Selective Thread Pool Modes
      Prolonged game logic routine might cause connection issues for clients. It is highly likely that this could be a game logic design problem. To prevent this from happening, ProudNet can run user routines and network I/O routines in a different thread pool.
    • Freedom in Thread Pool Relationship Formation
      In a distributed server environment, it is hard to design a server so that thread pool and server instance has a one-to-many relationship. If this is not guaranteed, kernel time could potentially be excessively high and reduce server performance. ProudNet gives option to developers to choose the relationship freely to suit different situations in minimizing kernel time and yield highest performance possible.

  • 4. Function that adapts to network environment

    4. Function that adapts to network environment

    It functions by considering the network environment

    • Coalesce
      Even when sending the same amount of messages, if you send data collected simultaneously at once, instead of sending a little by little for many times, and apply Unique ID additionally, you can reduce network traffic.
    • Fragmentation
      You may divide messages by considering MTU.
    • Congestion control
      Excessive UDP communication causes congestions on the network from time to time. ProudNet is equipped with UDP congestion control function to prevent this.

    ProudNet’s adaptive network protocol is designed to handle different network conditions and use ases seamlessly.
    (adaptive network protocol)


    Although ProudNet uses a low network protocol level, IP packet header reduction & optimization is used to raise efficiency in processing network traffic.

    • Stable Unreliable Message Protocol
      It is widely known that in gaming, UDP is unreliable but it is light on traffic and fast, making it a good candidate to be used for rapid event transmissions such as a character move or machine gun firing. For other messages, TCP is used since it is a reliable protocol. In other words, using UDP in socket API for messaging is simple but does not guarantee reliability as in using TCP. It also means that UDP is more vulnerable to hacking and can be less stable in diverse network environment. However, it has distinctive advantages in high action gaming due to its speed and simplicity.

    ProudNet’s unreliable messaging protocol provides much better stability than a simple UDP.

    • QoS Function in Engine Strata
      Games could cause a high volume of network traffic, latency and connection issues. These issues can be easily solved by ProudNet’s QoS(Quality of Service) or network Throttling. Especially, QoS function is useful for voice chatting in games.

  • 5. WiFi Handover

    5. WiFi Handover

    WiFi Handover


    It attempts re-connection promptly when switching to a new network with the network detection function within ProudNet.
    Even the messages sent when connection was lost are guaranteed to be transmitted when reconnected. P2P group information is also maintained and when reconnection to the server is completed, it automatically attempts hole punching. The developer may just think that the network stops temporarily for a short time.

  • 6. P2P Function #1

    6. P2P Function

    Powerful P2P transmission feature

    • When P2P is well used, load to the server can be reduced and responsiveness of games can be increased.
    • However, implementing a reliable P2P directly is very hard. ProudNet supports an easy-to-use and powerful P2P Function.
    • P2P function of ProudNet operates reliably based on many experiences.
    • P2P can be used for server-to-server communication.
    • Superpeer can be selected and utilized.

    P2P communication is used for voice chatting and character movement synchronization with its natural ability of being able to lower server loads and raising response times.

    • ProudNet allows developers to use simplified APIs for Client-to-Server and Client-to-Client connections. (There is no need to complicate a program source in handling various P2P connection states such as connection waiting, or checking disconnection in unstable network)
    • ProudNet is equipped with Hole-punching and relay feature – server relay related operations only take place in the inner part of ProudNet. (Developers do not need to build Hole-punching and relay feature separately)
    • ProudNet’s P2P communication has no wait time in connection.This allows games with lobby could start a game immediately without delays, and MMORPG games to use both C2C and C2S communications in world synchronization.

    Traffic Control

    P2P faces no problem in areas where there is good broadband Internet in place. This could be hardly the case in countries and regions like China, Southeast Asia, etc where there are ADSL2+ or lines under the speed. It is because the speed of P2P communications is low. If you don’t handle it well, many problems occur in P2P communications. Even NAT routers would stop working. To prevent the problem, ProudNet has

    • Function that uses server relay for more than a certain amount of transmission
    • Function of reducing packets

  • 6. P2P Function #2

    Unreliable & Reliable Messaging Support between P2P

    It is easier to send P2P messages across computers using UDP compared to TCP. However, UDP by nature is not reliable – does not guarantee delivery and delivery in order. In case of chatting between clients, some messages could be lost.
    ProudNet solves this problem by including ARQ (Automatic Repeat-reQuest) mechanism that is similar to TCP method.

    Hole-Punching Upkeep

    Hole-punching is essential for stable P2P communication. It is more important that hole- punching is maintained over an extended period time in a network with lots of P2P connections and high volume of traffic. In case of Internet cafes and some places in China, there are hundreds of computers connected to a single router. In this case, large amount of P2P traffic could fill up router’s port mapping entry list and cause disconnections.
    ProudNet is equipped with

    • Just-in-time hole-punching
    • Port mapping reuse
    • Technology to avoid duplicate port mapping entries

    Automatic Switch between Hole-punching and Relay

    Hole-punching for P2P can evaporate any time with traffic and certain status of NAT routers. If not handled properly, it could cause issues to players, such as co-player(s) suddenly not moving. ProudNet detects good and bad P2P connections and switches hole-punching and relays to avoid this issue.  When hole- punching is suddenly cleared for whatever reason, small latency would happen instead of a disconnection.  So, developers using ProudNet can safely assume P2P connection is always stable in developing a game.

    Just-In-Time Hole Punching


    • If hole punching is successful, it directly performs messaging afterwards.
    • Therefore, users can do P2P communication directly afterwards, without having to wait after establishing P2P group. It is because relay/hole punching switching is possible internally on its own.

  • 7. Messaging

    7. Messaging

    Remote Method Invocation


    • Have you ever written a large amount of switch-case statements to determine which message you just received? RMI of ProudNet can solve the tedium.
    • If you define a message with PIDL and compile it, a code that transmits (proxy) and receives (stub) is generated. Users can include it and register it in the server (or client) object and send messages, as if they are calling functions.




    When exchanging important data, encryption is a must.
    In ProudNet, we offer two major encryption methods.

    • Faster but weak encryption: Security is reduced but encryption/decryption speed is very fast.
    • Strong but slow encryption: Crecible AES algorithm is used.

    In some cases, it may be more beneficial to reduce traffic by compressing the message even if the server load is increased. In ProudNet, it offers easy-to-use compression features.

    • Highly protected encryption in client-server and client-client (P2P) messaging.
    • Packet sniffing, copying, and manipulation prevention mechanism.

  • 8. Distributed Server

    8. Distributed Server

    With a high number of users, single server machine is simply not enough to accommodate all users. Distributed server system is now a must in server environment to handle many users. This is a challenging task, especially because distributed servers need to maintain connections with clients. ProudNet provides server-to-server communication module. This module takes advantages of multi-core by making use of multi-threading. Similar to the game server module, this module uses multi-threading both internally and in handling user routine callbacks.


  • 9. Easy Development and Others

    9. Easy Development and Others

    Easy development

    The following is an example of client-server communications using ProudNet (similar codes and exceptionally handling omitted).


    ProudNet provides Remote Method Invocation (RMI) feature. Using this, network communication routines are created automatically without developers having to write them, and all this is without degrading performance. Considering online games typically have hundreds and thousands of different message types, this feature significantly reduces development times and prevents human errors and mistakes. ProudNet also provides client-server communication module, distributed server communication module, and database caching module to setup a custom server setup easily.


    Other Functions

    • Dump Selection : You can easily collect and analyze crashes or game programs (note: we do not support crash dump of mobile clients)
    • Super-peering (Host) selection :  Useful in various game genres such as FPS.
    • Hosts synchronization : Used for accuracy in action games.