SlideShare a Scribd company logo
构建 ActionScript 游戏服务器,
 支持超过 15000 并发连接
Building an ActionScript Game Server with over
        15,000 Concurrent Connections


             Renaun Erickson

                                       1
Basic MMO Game Architecture

                 •   Clients
                 •   Servers
                 •   Databases
                 •   Networking




                          2
MMO Network Considerations


•   Protocols (TCP, UDP, HTTP)
•   Firewalls
•   Latency
•   Packet Size
•   Data Schema



                                 3
Have to be able to create large
 number of connections that can
send packets at a reasonable rate
        and bandwidth




                             4
Socket Implementations
• Check each file descriptor each frame
  – Select, poll
     • Slow for large number of connections
• OS Optimized
  – Epoll, kqueue, /dev/poll, pollset, I/O Completion
    Ports
     • OS specific fast implementations
• Event based libraries
  – Libevent and libev
     • Fast for large number of connections
     • Portable code, hides OS specific implementations


                                                 5
Server Configuration

• Tell OS to allow large number of file
  descriptors
• Tell OS how much ram for each file
  descriptor
• Tell OS buffer sizes for network protocols
• Tell OS what ports range to use, only 65k
  ports per IP

                                      6
Flash on the Client and Server

• Many MMOs in China use Flash as the
  Client
• Server naturally has MMO game logic
• Put game logic on server for security
• Many benefits of using the same
  language on client and server

Is ActionScript on the server possible?

                                      7
ActionScript on the Server

• Flash Player Dissected
  – Core – VM, Primitives, ActionScript syntax
  – APIs – C/C++ classes implementing rich Flash
    Player API and features
• Tamarin
  – Open sourced core parts of the Flash Player
  – No rich API or features, you have to write
    them yourself


                                         8
Tamarin Projects

• Thane (part of Whirled SDK by ThreeRings)
  – http://wiki.whirled.com/Whirled_SDK
• Redtamarin (by zwetan and others)
  – http://code.google.com/p/redtamarin/
• PushButton Engines Network component by
  Ben Garney
  – https://github.com/PushButtonLabs/PBNetwork
    ing


                                           9
Case Study: SpellTraction




Design By: Garth Braithwaite http://www.garthdb.com/ @garthdb
                                                    10
Live Demo and Source Code


• http://renaun.com/serveras/test
• http://renaun.com/serveras/spelltraction/
• https://github.com/renaun/ActionScriptGa
  meServerExamples




                                    11
Server Setup
• Game Server
  – Amazon EC2 Medium Server
  – 64 bit Ubuntu OS
  – Running two game instances
    • Main
    • Load Test
• Load Test Server
  – Amazon EC2 Medium Server
  – Custom test scripts


                                 12
Server Code

• Redtamarin
  – Created ServerSocket.as – libev socket
    implementation
  – Compile ActionScript files into ActionScript
    Byte Code (abc files)
  – Command line redtamarin shell runs the abc
    files



                                          13
Server ActionScript Code
function loopHandler():void
{
        if (!ss.listening)
                ss.listen("10.111.33.190", 12122);
        else
                serverBrain.beat(); // Game Tick
}

var serverDispatcher:SocketServerNerveDispatcher
        = new SocketServerNerveDispatcher();
var serverBrain:ServerBrain = new ServerBrain();
var serverNerve:ServerNerveSystem
         = new ServerNerveSystem(serverBrain, serverDispatcher);
serverBrain.addNerve(serverNerve);
var ss:ServerSocket
         = serverDispatcher.createServerSocket(serverNerve);
ss.loop.add(loopHandler);
ss.start(250);




                                                        14
Libev Socket Implementation
bool ServerSocketObject::_listen(Stringp host, const int port)
{
    struct socket_io w_accept;

    StUTF8String hostUTF8(host);
    const char* hostAddr = hostUTF8.c_str();

    if( (w_accept.fd = socket(PF_INET, SOCK_STREAM, 0)) < 0 ) return false;
    int flags = fcntl(w_accept.fd, F_GETFL, 0);
    fcntl(w_accept.fd, F_SETFL, (flags > 0 ? flags : 0) | O_NONBLOCK);

    sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(hostAddr);
    addr.sin_port = htons(port);
    int status = bind(w_accept.fd, reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr));
    if (status != 0) return false;

    _socket = w_accept.fd;
    if (listen(w_accept.fd, 2) < 0) return false;
    w_accept.socketObject = this;

    // Initialize and start a watcher to accepts client requests
    ev_io_init(&w_accept.io, accept_cb, w_accept.fd, EV_READ);
    ev_io_start(loop_ev, &w_accept.io);
    ev_loop(loop_ev, 0);
    return true;
}



                                                                                 15
Linux Kernel Configurations
/etc/sysctl.conf
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.core.optmem_max = 33554432
net.ipv4.tcp_rmem = 4096 4096 33554432
net.ipv4.tcp_wmem = 4096 4096 33554432
net.ipv4.tcp_mem = 786432 1048576 26777216
net.ipv4.tcp_max_tw_buckets = 360000
net.core.netdev_max_backlog = 30000
net.ipv4.ip_local_port_range = 2048 65535
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_no_metrics_save = 1
net.core.somaxconn = 131072
fs.file-max = 131072

/usr/include/linux/limits.h
NR_OPEN = 65536
/etc/security/limits.conf
*                soft     nofile        65535
*                hard     nofile        65535




                                                16
Client Code
Client




                       Shared Code




Server



                             17
Q/A


  renaun@adobe.com

  http://github.com/renaun

  @renaun

  http://renaun.com/blog




                       18

More Related Content

What's hot (19)

PPTX
BGF 2012 (Browsergames Forum)
Christof Wegmann
 
PDF
Highly available Drupal on a Raspberry Pi cluster
Jeff Geerling
 
PPTX
Drupal RPG - A Backend Server Story
Eladio Jose Abquina
 
PPTX
Automating with Ansible
Ricardo Schmidt
 
PDF
Happy Browser, Happy User! WordSesh 2019
Katie Sylor-Miller
 
PDF
Ansible 101
Gena Mykhailiuta
 
PPTX
MongoDB on Azure - Tips, Tricks and Examples
MongoDB
 
KEY
Nodejs web,db,hosting
Kenu, GwangNam Heo
 
PDF
Server architecture & scaling strategy for a sports website
Leonidas Tsementzis
 
PPTX
Heroes of Paragon: publishing Unity WebGL game on Facebook
DevGAMM Conference
 
PPTX
Microsoft Azure Media Services
Pavel Revenkov
 
PPTX
Photon Load Test #1
Christof Wegmann
 
PDF
Stream processing in Mercari - Devsumi 2015 autumn LT
Masahiro Nagano
 
PPTX
Windows Azure Virtual Machines And Virtual Networks
Kristof Rennen
 
ODP
ansible why ?
Yashar Esmaildokht
 
PPTX
Level Up: 5 Expert Tips for Optimizing WordPress Performance
Pantheon
 
PDF
Building a Docker Swarm cluster on ARM by Dieter Reuter and Stefan Scherer
Docker, Inc.
 
PDF
Building Multiplayer Games (w/ Unity)
Noam Gat
 
PPTX
OGDC Datastorage Solution_Mr.Dung, Dinh Nguyen Anh
Buff Nguyen
 
BGF 2012 (Browsergames Forum)
Christof Wegmann
 
Highly available Drupal on a Raspberry Pi cluster
Jeff Geerling
 
Drupal RPG - A Backend Server Story
Eladio Jose Abquina
 
Automating with Ansible
Ricardo Schmidt
 
Happy Browser, Happy User! WordSesh 2019
Katie Sylor-Miller
 
Ansible 101
Gena Mykhailiuta
 
MongoDB on Azure - Tips, Tricks and Examples
MongoDB
 
Nodejs web,db,hosting
Kenu, GwangNam Heo
 
Server architecture & scaling strategy for a sports website
Leonidas Tsementzis
 
Heroes of Paragon: publishing Unity WebGL game on Facebook
DevGAMM Conference
 
Microsoft Azure Media Services
Pavel Revenkov
 
Photon Load Test #1
Christof Wegmann
 
Stream processing in Mercari - Devsumi 2015 autumn LT
Masahiro Nagano
 
Windows Azure Virtual Machines And Virtual Networks
Kristof Rennen
 
ansible why ?
Yashar Esmaildokht
 
Level Up: 5 Expert Tips for Optimizing WordPress Performance
Pantheon
 
Building a Docker Swarm cluster on ARM by Dieter Reuter and Stefan Scherer
Docker, Inc.
 
Building Multiplayer Games (w/ Unity)
Noam Gat
 
OGDC Datastorage Solution_Mr.Dung, Dinh Nguyen Anh
Buff Nguyen
 

Viewers also liked (20)

PPT
Social Game
ematrix
 
PPT
构建ActionScript游戏服务器,支持超过15000并发连接
Renaun Erickson
 
PPT
Astral game server
astralgame
 
DOC
China game-server-vpn-to-reduce-delay-abroad
J enny
 
PDF
閒聊Python應用在game server的開發
Eric Chen
 
PDF
How_to_build_GameServer_2
Peter Rybar
 
PDF
Multi thread game server
OnGameServer
 
PDF
SDC 3rd 안중원님 - InGame CashShop 개발 하기
OnGameServer
 
PPTX
Next-generation MMORPG service architecture
Jongwon Kim
 
PDF
C/C++调试、跟踪及性能分析工具综述
Xiaozhe Wang
 
PDF
TIP1 - Overview of C/C++ Debugging/Tracing/Profiling Tools
Xiaozhe Wang
 
PPT
Маркетинг 2015 - основни правила за малкия и среден бизнес
Justine Toms
 
PPTX
Почему не работают корпоративные социальные сети?
Anna Nesmeeva
 
PDF
はじめてのLWF for Open Hack Day
Daniel-Hiroyuki Haga
 
PDF
resumeh aali1
Hossein Nourian, DBA
 
PPT
Checkout proceso optimizavimas el. parduotuvėse
Vladas Sapranavicius
 
PPTX
Innovative Uses of Technology in International Education
Marty Bennett
 
PPTX
Ultizing Online Space: Virtual Fairs and Online Conversion Tools (with poll r...
Marty Bennett
 
PDF
anybuild/Hosting casual #1
Ryo Kuroda
 
PDF
portfolio_tmajasaari
Tarmo Majasaari
 
Social Game
ematrix
 
构建ActionScript游戏服务器,支持超过15000并发连接
Renaun Erickson
 
Astral game server
astralgame
 
China game-server-vpn-to-reduce-delay-abroad
J enny
 
閒聊Python應用在game server的開發
Eric Chen
 
How_to_build_GameServer_2
Peter Rybar
 
Multi thread game server
OnGameServer
 
SDC 3rd 안중원님 - InGame CashShop 개발 하기
OnGameServer
 
Next-generation MMORPG service architecture
Jongwon Kim
 
C/C++调试、跟踪及性能分析工具综述
Xiaozhe Wang
 
TIP1 - Overview of C/C++ Debugging/Tracing/Profiling Tools
Xiaozhe Wang
 
Маркетинг 2015 - основни правила за малкия и среден бизнес
Justine Toms
 
Почему не работают корпоративные социальные сети?
Anna Nesmeeva
 
はじめてのLWF for Open Hack Day
Daniel-Hiroyuki Haga
 
resumeh aali1
Hossein Nourian, DBA
 
Checkout proceso optimizavimas el. parduotuvėse
Vladas Sapranavicius
 
Innovative Uses of Technology in International Education
Marty Bennett
 
Ultizing Online Space: Virtual Fairs and Online Conversion Tools (with poll r...
Marty Bennett
 
anybuild/Hosting casual #1
Ryo Kuroda
 
portfolio_tmajasaari
Tarmo Majasaari
 
Ad

Similar to Building an ActionScript Game Server with over 15,000 Concurrent Connections (20)

PPTX
RHCE (RED HAT CERTIFIED ENGINEERING)
Sumant Garg
 
PDF
Scalable Networking
l xf
 
PDF
2003 scalable networking - unknown
George Ang
 
PDF
Meiga Guadec 2009 English
eocanha
 
PDF
Nio
nextlib
 
PDF
Combining the Strengths or Erlang and Ruby
Wooga
 
PDF
Combining the strength of erlang and Ruby
Martin Rehfeld
 
ODP
Scaling a Game Server: From 500 to 100,000 Users
GeekNightHyderabad
 
PPT
Net Programming.ppt
EloAcubaOgardo
 
PDF
Web Server Deathmatch 2009 Erlang Factory Joe Williams
logicalstack
 
PPT
Multiplayer Games Chapter 6 Network Topologies.ppt
MoissFreitas13
 
DOCX
Running Head IMPLEMENTING THE LIST AND SEARCH FEATURES IN THE DIS.docx
cowinhelen
 
PPT
Network programming-Network for engineering
insdcn
 
PPT
Network Prog.ppt
EloOgardo
 
PDF
Muduo network library
Shuo Chen
 
PDF
Socket programming using java
UC San Diego
 
PDF
Erlang factory slides
Lecturer UC Davis & Northwestern
 
PDF
Erlang factory slides
Noah Linden
 
PDF
At Scale With Style
Martin Rehfeld
 
PDF
At Scale With Style (Erlang User Conference 2012)
Wooga
 
RHCE (RED HAT CERTIFIED ENGINEERING)
Sumant Garg
 
Scalable Networking
l xf
 
2003 scalable networking - unknown
George Ang
 
Meiga Guadec 2009 English
eocanha
 
Nio
nextlib
 
Combining the Strengths or Erlang and Ruby
Wooga
 
Combining the strength of erlang and Ruby
Martin Rehfeld
 
Scaling a Game Server: From 500 to 100,000 Users
GeekNightHyderabad
 
Net Programming.ppt
EloAcubaOgardo
 
Web Server Deathmatch 2009 Erlang Factory Joe Williams
logicalstack
 
Multiplayer Games Chapter 6 Network Topologies.ppt
MoissFreitas13
 
Running Head IMPLEMENTING THE LIST AND SEARCH FEATURES IN THE DIS.docx
cowinhelen
 
Network programming-Network for engineering
insdcn
 
Network Prog.ppt
EloOgardo
 
Muduo network library
Shuo Chen
 
Socket programming using java
UC San Diego
 
Erlang factory slides
Lecturer UC Davis & Northwestern
 
Erlang factory slides
Noah Linden
 
At Scale With Style
Martin Rehfeld
 
At Scale With Style (Erlang User Conference 2012)
Wooga
 
Ad

Recently uploaded (20)

PDF
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
PPTX
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Apache CloudStack 201: Let's Design & Build an IaaS Cloud
ShapeBlue
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PPTX
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
PDF
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
PDF
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PPTX
Building a Production-Ready Barts Health Secure Data Environment Tooling, Acc...
Barts Health
 
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Apache CloudStack 201: Let's Design & Build an IaaS Cloud
ShapeBlue
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Building a Production-Ready Barts Health Secure Data Environment Tooling, Acc...
Barts Health
 

Building an ActionScript Game Server with over 15,000 Concurrent Connections

  • 1. 构建 ActionScript 游戏服务器, 支持超过 15000 并发连接 Building an ActionScript Game Server with over 15,000 Concurrent Connections Renaun Erickson 1
  • 2. Basic MMO Game Architecture • Clients • Servers • Databases • Networking 2
  • 3. MMO Network Considerations • Protocols (TCP, UDP, HTTP) • Firewalls • Latency • Packet Size • Data Schema 3
  • 4. Have to be able to create large number of connections that can send packets at a reasonable rate and bandwidth 4
  • 5. Socket Implementations • Check each file descriptor each frame – Select, poll • Slow for large number of connections • OS Optimized – Epoll, kqueue, /dev/poll, pollset, I/O Completion Ports • OS specific fast implementations • Event based libraries – Libevent and libev • Fast for large number of connections • Portable code, hides OS specific implementations 5
  • 6. Server Configuration • Tell OS to allow large number of file descriptors • Tell OS how much ram for each file descriptor • Tell OS buffer sizes for network protocols • Tell OS what ports range to use, only 65k ports per IP 6
  • 7. Flash on the Client and Server • Many MMOs in China use Flash as the Client • Server naturally has MMO game logic • Put game logic on server for security • Many benefits of using the same language on client and server Is ActionScript on the server possible? 7
  • 8. ActionScript on the Server • Flash Player Dissected – Core – VM, Primitives, ActionScript syntax – APIs – C/C++ classes implementing rich Flash Player API and features • Tamarin – Open sourced core parts of the Flash Player – No rich API or features, you have to write them yourself 8
  • 9. Tamarin Projects • Thane (part of Whirled SDK by ThreeRings) – http://wiki.whirled.com/Whirled_SDK • Redtamarin (by zwetan and others) – http://code.google.com/p/redtamarin/ • PushButton Engines Network component by Ben Garney – https://github.com/PushButtonLabs/PBNetwork ing 9
  • 10. Case Study: SpellTraction Design By: Garth Braithwaite http://www.garthdb.com/ @garthdb 10
  • 11. Live Demo and Source Code • http://renaun.com/serveras/test • http://renaun.com/serveras/spelltraction/ • https://github.com/renaun/ActionScriptGa meServerExamples 11
  • 12. Server Setup • Game Server – Amazon EC2 Medium Server – 64 bit Ubuntu OS – Running two game instances • Main • Load Test • Load Test Server – Amazon EC2 Medium Server – Custom test scripts 12
  • 13. Server Code • Redtamarin – Created ServerSocket.as – libev socket implementation – Compile ActionScript files into ActionScript Byte Code (abc files) – Command line redtamarin shell runs the abc files 13
  • 14. Server ActionScript Code function loopHandler():void { if (!ss.listening) ss.listen("10.111.33.190", 12122); else serverBrain.beat(); // Game Tick } var serverDispatcher:SocketServerNerveDispatcher = new SocketServerNerveDispatcher(); var serverBrain:ServerBrain = new ServerBrain(); var serverNerve:ServerNerveSystem = new ServerNerveSystem(serverBrain, serverDispatcher); serverBrain.addNerve(serverNerve); var ss:ServerSocket = serverDispatcher.createServerSocket(serverNerve); ss.loop.add(loopHandler); ss.start(250); 14
  • 15. Libev Socket Implementation bool ServerSocketObject::_listen(Stringp host, const int port) { struct socket_io w_accept; StUTF8String hostUTF8(host); const char* hostAddr = hostUTF8.c_str(); if( (w_accept.fd = socket(PF_INET, SOCK_STREAM, 0)) < 0 ) return false; int flags = fcntl(w_accept.fd, F_GETFL, 0); fcntl(w_accept.fd, F_SETFL, (flags > 0 ? flags : 0) | O_NONBLOCK); sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(hostAddr); addr.sin_port = htons(port); int status = bind(w_accept.fd, reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr)); if (status != 0) return false; _socket = w_accept.fd; if (listen(w_accept.fd, 2) < 0) return false; w_accept.socketObject = this; // Initialize and start a watcher to accepts client requests ev_io_init(&w_accept.io, accept_cb, w_accept.fd, EV_READ); ev_io_start(loop_ev, &w_accept.io); ev_loop(loop_ev, 0); return true; } 15
  • 16. Linux Kernel Configurations /etc/sysctl.conf net.core.rmem_max = 33554432 net.core.wmem_max = 33554432 net.core.rmem_default = 1048576 net.core.wmem_default = 1048576 net.core.optmem_max = 33554432 net.ipv4.tcp_rmem = 4096 4096 33554432 net.ipv4.tcp_wmem = 4096 4096 33554432 net.ipv4.tcp_mem = 786432 1048576 26777216 net.ipv4.tcp_max_tw_buckets = 360000 net.core.netdev_max_backlog = 30000 net.ipv4.ip_local_port_range = 2048 65535 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_no_metrics_save = 1 net.core.somaxconn = 131072 fs.file-max = 131072 /usr/include/linux/limits.h NR_OPEN = 65536 /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 16
  • 17. Client Code Client Shared Code Server 17
  • 18. Q/A [email protected] http://github.com/renaun @renaun http://renaun.com/blog 18

Editor's Notes

  • #6: MMO Server Architecture
  • #11: Explain what SpellTraction is.