[Development] 4267 Private server built using the Typesafe stack (Scala, Akka)
Discussion on [Development] 4267 Private server built using the Typesafe stack (Scala, Akka) within the CO2 Private Server forum part of the Conquer Online 2 category.
[Development] 4267 Private server built using the Typesafe stack (Scala, Akka)
Hi Everyone,
Before I begin I'd just like to give a shout out to Korvacs for his packet wiki (). It's been extremely helpful
Just wanted to give you guys a preview of the server I've been working on for the past month.
The server is built using the Typesafe stack with includes the below core technologies. The server seems to handle lots of clients. I've tested it by spawning 15,000 bot clients over all game maps and had them jump and talk every 1 - 2 seconds. It handled this well but of course this is spread out over the entire world. On a single map the server currently seems to handle around 1000 clients before lag starts hitting. I've also designed the server in a way that would allow each map to be run on a different server or all on a single server. This would allow further scalability.
Technologies:
- Scala (Functional programming language running on the JVM)
- Akka (Actor library)
- Slick (ORM)
- Spray (Library for building high performance network applications)
- MySQL
Testing Server:
- Ubuntu 14.04 server running under Windows 8 Hyper V
- 5 Cores allocated
- 4 Gigs of ram
The server is designed using the Actor model. This model makes building highly concurrent applications much easier. All objects (Actors) communicate with each other by sending messages to one another.
As of today (June 22, 2014) the server has the following features developed:
- Login
- Interacting with other players
- Trading
- Warehouse
- NPC Scripting system
- Buying & Selling to NPCs
- DMap loading
- Mob spawning
- Basic monster AI
- Basic stat calculations
- Attack monsters
- Portals
- Dropping/Picking up items from the world
Well, the server should be able to handle that type of processing (one or two packets every one or two seconds). That isn't impressive to me. What's impressive is sorting through that and displaying them on the client's screen. What I would like to see is a program that creates server connections and sends 10 to 20 packets a second (more realistic). Then have it spam connect/disconnect and ensure that there are no memory leaks and that GC doesn't slow things down too much.
Well, the server should be able to handle that type of processing (one or two packets every one or two seconds). That isn't impressive to me. What's impressive is sorting through that and displaying them on the client's screen. What I would like to see is a program that creates server connections and sends 10 to 20 packets a second (more realistic). Then have it spam connect/disconnect and ensure that there are no memory leaks and that GC doesn't slow things down too much.
Yeah, I will be updating the stress tester to try more realistic scenarios. First I want to finish the mob ai to see how it performs with that many clients.
I'll most likely release the code for the stress tool.
Today I implemented mob and guard ai and a start to the magic attack system. Does anyone know if 4267 has a packet for a re-spawn animation? Currently the mobs just re-appear without an animation.
I'm going to run the stresser overnight with 15k bots again and see how the mob ai handles to all those clients
I'll most likely release the code for the stress tool.
Today I implemented mob and guard ai and a start to the magic attack system. Does anyone know if 4267 has a packet for a re-spawn animation? Currently the mobs just re-appear without an animation.
I'm going to run the stresser overnight with 15k bots again and see how the mob ai handles to all those clients
Guard using Tornado!!!!
I know in 5017 i had used the following:
Quote:
name = "MBStandard";
PWR.Fill((ushort)(13 + name.Length), 0);
PWR.Fill((ushort)1015, 2);
PWR.Fill((uint)UID, 4); //UID of the mob
PWR.Fill((byte)Type, 8); //String Type = 10
PWR.Fill((byte)Number, 9); // Number = 1
PWR.Fill((byte)name.Length, 10);
PWR.Fill(name, 11);
PWR.Fill((ushort)0, name.Length + 11);
[Development] 4267 conquer server. 06/16/2010 - CO2 Private Server - 408 Replies Heya,
I've started a new development for a classic co server as I never saw one succesfull build up with a from scratch written and not leeched source.
We're currently aiming to add-in bot protection, proxy detection and various protections to prevent hacking.
So let's talk more about the source itsself, It's made from scratch and self written socket system, database handling is currently flatfile based. The loginserver is done but we're working on the gameserver now.
(Will be...