Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Ryzen Emulator [Javascript/ES6/ORM/Post-Shuffle]

Status
Not open for further replies.
topkek amirite??
Joined
May 16, 2009
Messages
751
Reaction score
696
I'd suggest sticking to a more traditional monolithic architecture rather than making it horizontally scalable. It's really not needed.. Unless the aim of your project isn't necessarily to create a full habbo emulator and is more to do with learning new architectures then go ahead and use Orbit, I've messed with it in the past and it really is a cool library.
 
Initiate Mage
Joined
Jul 13, 2015
Messages
71
Reaction score
31
I thought a (maybe) efficient method: On socket connect (managed by netty handler), an observer is created and written to an actor persistent state. On socket text, the client packet is decoded and is notified a equivalent server packet to the observer. Then the observer send the server packet do client.
Something like that
Code:
observer = object : ChatObserver() {
    override fun receiveMessage(message: ServerMessageDto): Task<Void> {
        // Transform the ServerMessageDto to buffer format
        buffer = message.toBuffer()

        ctx.write(buffer)
        ctx.flush()
     }
}

I'd suggest sticking to a more traditional monolithic architecture rather than making it horizontally scalable. It's really not needed.. Unless the aim of your project isn't necessarily to create a full habbo emulator and is more to do with learning new architectures then go ahead and use Orbit, I've messed with it in the past and it really is a cool library.
I don't give a duck to Habbo. My unique aim is improve my knowledge
 
Last edited:

pel

Skilled Illusionist
Joined
Jan 27, 2012
Messages
382
Reaction score
343
I thought a (maybe) efficient method: On socket connect (managed by netty handler), an observer is created and written to an actor persistent state. On socket text, the client packet is decoded and is notified a equivalent server packet to the observer. Then the observer send the server packet do client.
Something like that
Code:
observer = object : ChatObserver() {
    override fun receiveMessage(message: ServerMessageDto): Task<Void> {
        // Transform the ServerMessageDto to buffer format
        buffer = message.toBuffer()

        ctx.write(buffer)
        ctx.flush()
     }
}


I don't give a duck to Habbo. My unique aim is improve my knowledge

At least you're completely honest. +1
Good luck!
 
C# / Java Programmer
Joined
Jan 1, 2007
Messages
346
Reaction score
177
I thought a (maybe) efficient method: On socket connect (managed by netty handler), an observer is created and written to an actor persistent state. On socket text, the client packet is decoded and is notified a equivalent server packet to the observer. Then the observer send the server packet do client.

Might've changed since I was last filled in, but this sounds very similar to Sulake's current architecture. They use effectively stateless TCP frontends that convert the game messages to be handled by observers in the main game server (which itself is multiple components).

It's a great way to scale, but there are some overhead penalties to doing it like that. Not the most practical solution for a small-scale retro, but it sounds like a fun learning experience. Good luck with the project!
 
Developer
Member
Joined
Jul 28, 2009
Messages
983
Reaction score
133
Might've changed since I was last filled in, but this sounds very similar to Sulake's current architecture. They use effectively stateless TCP frontends that convert the game messages to be handled by observers in the main game server (which itself is multiple components).

It's a great way to scale, but there are some overhead penalties to doing it like that. Not the most practical solution for a small-scale retro, but it sounds like a fun learning experience. Good luck with the project!

For people who are interested in the article about the architecture, link: http://forum.ragezone.com/f801/habbo-architecture-brief-history-article-1051918/

Pretty interesting article to read, it's 14 pages long.
 
C# / Java Programmer
Joined
Jan 1, 2007
Messages
346
Reaction score
177
Yeah and considering its from 2000, was already pretty remarkable back then.

Once they decided to run at scale, this model makes a lot of sense. It's not an uncommon design for HA and scalability. Agreed though, it was impressive for what it was.

** worth noting, a lot of the technologies for doing this, with the services they were using, were bleeding edge or developed internally. The fact that it didn't explode more often is awesome.


 
Last edited:
Initiate Mage
Joined
Jul 13, 2015
Messages
71
Reaction score
31
Change-log
  • Continuous integration
  • Simple packet decoder
  • Set upped slf4j-log4j
  • Fixed Unrecognized Windows Sockets error ( )
 
Initiate Mage
Joined
Jul 13, 2015
Messages
71
Reaction score
31
Well. I've been working on more research. Sometimes with help of a Microsoft engineer mate
Some graphs which prove the actor model efficiency on servers:
lai0n - Ryzen Emulator [Javascript/ES6/ORM/Post-Shuffle] - RaGEZONE Forums

Source: Microsoft Orleans

And I noticed on tests that orbit allows run the service at very high CPU utilization. I have run load tests for couple hours at 90+% CPU utilization without any instability and low latency. I don't know if this is good for Habbo servers, but whatever.
And I designed a base structure for the service
lai0n - Ryzen Emulator [Javascript/ES6/ORM/Post-Shuffle] - RaGEZONE Forums




On my eyes, actors is the perfect choice.
Implement it on a kotlin server will be the hardest thing that I'll do
but is totally useless. Which Habbo server needs this?
Maybe I will only use netty.
 
Last edited:
Initiate Mage
Joined
Jul 13, 2015
Messages
71
Reaction score
31
I'm sorry for the lack of updating. I was busy with school things
I will start committing this sunday
And I'll not use actors
 
Initiate Mage
Joined
Jul 13, 2015
Messages
71
Reaction score
31
Change-log:
Thread updated.
Repository moved.
 
Initiate Mage
Joined
Jul 13, 2015
Messages
71
Reaction score
31
Project closed. I'm really busy with school and my startup
Searching to a apartment to rent, so much thing.
Sorry guys.
 
Last edited:
Developer
Developer
Joined
Dec 11, 2010
Messages
2,955
Reaction score
2,685
Thread closed.

Please don't hesitate to private message me, or another moderator within this section to reopen this thread.
 
Status
Not open for further replies.
Back
Top