• Unfortunately, we have experienced significant hard drive damage that requires urgent maintenance and rebuilding. The forum will be a state of read only until we install our new drives and rebuild all the configurations needed. Please follow our Facebook page for updates, we will be back up shortly! (The forum could go offline at any given time due to the nature of the failed drives whilst awaiting the upgrades.) When you see an Incapsula error, you know we are in the process of migration.

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.
 
Newbie Spellweaver
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
Loyal 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:
Newbie Spellweaver
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 ( )
 
Newbie Spellweaver
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:
Newbie Spellweaver
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
 
Newbie Spellweaver
Joined
Jul 13, 2015
Messages
71
Reaction score
31
Change-log:
Thread updated.
Repository moved.
 
Newbie Spellweaver
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,688
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