any new technology or techniques for private servers development?

09/25/2014 15:37 OverKillasdwqe#1
i'm about to start writing a new server from scratch (going to release source code), also would be on current patch to get it to replace trinity shitty edits

so i was wondering if there is a new technology or techniques out there that anyone would like to share/discuss

i've always rushed or even skipped code architecture which leads to bad design (one time was fatal) so im taking my time on this one

any better database system than mysql with nhib ? or what about flat db with or without binary or xml serializing objects maybe ?
any better socket system than the async. one that everyone uses ?
should i use lazy loading for heavy parts ?
what about a phyton or even db scripts for npcs and others ?
what about tq binary db style with actions ?
what you think of the performance of dmap handler solutions that been released ? tiny maps maybe?

i think you know where this is going (i throw couple of questions we all ask at some point but you may talk about anything in general about private servers development techniques and technologies ), please keep ideas and discussion coming, and lets keep it clean

just put in mind that complexity doesn't matter to me as much as performance does
09/25/2014 17:45 Spirited#2
There's a source I released that nobody seems to want to look at because it's only a [Only registered and activated users can see links. Click Here To Register...], and written in C++. It has some small bugs since it was never really heavily unit tested, but it's a starting point for newer and better handling ideas. CptSky also has [Only registered and activated users can see links. Click Here To Register...] written in C++ using QT. Finally, I have a [Only registered and activated users can see links. Click Here To Register...] I released that also has good performance and ideas that sources don't use.
09/25/2014 17:55 pintinho12#3
I highly recommend the Phoenix Project from Spirited, i've been working on his Socket, since i don't know how to handle multiple servers yet (Login, Msg, Map etc). But my project is using his Socket and Security System and it looks pretty cool. Also the cq_action style you can get from Exodus Binaries that has already been released, i have my edited copy of that one too with the NPCs packets being handled the right way, if you need, i may share, it makes use of cq_action, cq_npc and cq_task.
09/25/2014 18:04 abdoumatrix#4
I recommend the Phoenix Project of Spirited.

as it is the only one the look forward for cross server and has brilliant structure.

or CSV3

both has a brilliant stuffs that u should consider in yours
09/25/2014 18:21 Spirited#5
I appreciate the recommendations towards Phoenix, but the socket system isn't an optimal design. It sacrifices quite a bit of performance (though still very high performance) to readability. A split receive socket design is not optimal. The most optimal approach would be to use pointers (which I know, isn't everyone's favorite). [Only registered and activated users can see links. Click Here To Register...] (use as only an example, I've modified this to fix certain bugs since then). I'll probably post the new design on my blog and in the other conquer community in a few days.
09/26/2014 02:30 Xio.#6
I'd like to see proper use of SAEA and the threadless Async/Await pattern. Other than that maybe a WCF Database server using Named Pipes. Basically everything XioOnline uses. I like to compare my stuff with others :D

By the way: Flat files are fucking nice. I'm getting so much hate for using ini files but honestly with a cached implementation which writes to a ramdisk, asynchronusly, it outperforms mysql every. single. time. Unless its the In memory mysql database type thingy, that shit is fast.
09/26/2014 04:12 Aceking#7
Quote:
Originally Posted by Xio. View Post
I'd like to see proper use of SAEA and the threadless Async/Await pattern. Other than that maybe a WCF Database server using Named Pipes. Basically everything XioOnline uses. I like to compare my stuff with others :D

By the way: Flat files are fucking nice. I'm getting so much hate for using ini files but honestly with a cached implementation which writes to a ramdisk, asynchronusly, it outperforms mysql every. single. time. Unless its the In memory mysql database type thingy, that shit is fast.
I will always choose a DBMS like MySQL or mssql every time.
While flat files may offer a slight performance advantage.
I personally think you lose management efficiency, readability and output quality that greatly outweighs any slight performance advantage.

There's a reason that RDBMS are the standard these days.

What happens if you decide to add a field to the character table.
Let's also say you have 1000 characters created.
Are you going to manually edit each one? Write a program to update them all?

It is by far more efficient to use SQL to handle this.

I don't think we need to get into the ability to write queries in seconds in order to generate some form of report like all characters that are reborn.

These are just examples but in my opinion the extendability of the DBMS will always win over flat file in a server application like conquer.

Some may disagree but that's how I feel
09/26/2014 04:24 InsomniacPro#8
Quote:
Originally Posted by Xio. View Post
I'd like to see proper use of SAEA and the threadless Async/Await pattern. Other than that maybe a WCF Database server using Named Pipes. Basically everything XioOnline uses. I like to compare my stuff with others :D

By the way: Flat files are fucking nice. I'm getting so much hate for using ini files but honestly with a cached implementation which writes to a ramdisk, asynchronusly, it outperforms mysql every. single. time. Unless its the In memory mysql database type thingy, that shit is fast.
How the fuck did I know that line was coming?
09/26/2014 04:57 Spirited#9
Xio doesn't know what he's talking about. Please ignore him and listen to the knowledgeable developers (I know I'm being harsh Yuki, but sharing bad practices with new developers isn't helping anyone). MySQL and SQL are both very good, high performing relational database managers. If for some reason you're really into flat-files... you should look into NoSQL (Not Only SQL). You shouldn't be creating your own database management system, or looking into databases. MySQL is very air-tight. What's not is this community's programming. Focus on how we talk to MySQL, how we talk to players (the socket system), and how we handle their data (packet processing).
09/26/2014 09:55 KraHen#10
I really really really really recommend everyone interested in the topic to check out the TrinityCore source (no, not that Trinity).

[Only registered and activated users can see links. Click Here To Register...]

This is the hearth and soul of many WoW servers, and is implemented fairly well, it scales well, and makes use of modern technologies, such as boost::ASIO. Obviously you have to blast through lots of stuff that isn`t CO related, but the core of the server is worth analyzing. 9/10, would recommend.

As far as the "threadless async/await" goes, it is not a great idea for the server core. Your socket system will be limited because of it, I benchmarked the classic BeginX API, the async implementation and the SAEA implementation, and to be fair, BeginX is almost as good as SAEA and will yield better structure and readability. Plus, you don`t really want super high performance in the case of CO, since you won`t have more than 1-2k concurrent connections (TOPS) anyways.
09/26/2014 13:22 Best Coder 2014#11
Quote:
Originally Posted by Xio. View Post
I'd like to see proper use of SAEA and the threadless Async/Await pattern.
What do you mean by "threadless"?
09/26/2014 18:32 Super Aids#12
New technologies? What about languages that uses "new technologies" ??

D or Rust?
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]


vibe.d would probably be one of the best solution for the core.
[Only registered and activated users can see links. Click Here To Register...]
09/26/2014 21:35 Xio.#13
Quote:
Originally Posted by Best Coder 2014 View Post
What do you mean by "threadless"?
Not using "await Task.Run()" ... since that is just using the threadpool to do it. I've seen my fair share of "wanna-be asynchronus" programming.


And fang, looks whos talking. I shouldnt create my own shit? I cant do it because you think its bad or useless? Dude your fuckin phoenix mess uses encrypted inter process comunication... now thats fucking useless imo. It works fine for me, no issues so far. I like to create everything I use myself. Co2 is a hobby not a job.

I don't want top performance for conquer because I will only have 1-2k connections max? Who cares, if you can improve parts of it why wouldnt you if you got the time for it? I mean whats wrong with having it?


Wasnt talking about the sockets to be honest, for example, we use it for the skills. Its a nice way to make the skill delay work in one line. await Task.Delay(Skill.IntoneDuration); <- thats one of many reasons we picked the async await model on skills. Our saving / loading uses async/await IO, packets are processed the same way.
09/26/2014 22:24 Korvacs#14
Quote:
Originally Posted by Xio. View Post
Not using "await Task.Run()" ... since that is just using the threadpool to do it. I've seen my fair share of "wanna-be asynchronus" programming.
You don't understand what the threadless async/await methodology is about.

Code:
await Task.Run();
This is correct, because you don't have to use a thread waiting for that task to complete because you are using await, to say that you can go beyond that and not have a thread running while executing code isn't possible.

All that changes is that the calling thread is freed up and can be used for other uses in the mean time instead of blocking, the code still has to execute somewhere.
09/26/2014 23:57 Best Coder 2014#15
Quote:
Originally Posted by Xio. View Post
Not using "await Task.Run()" ... since that is just using the threadpool to do it. I've seen my fair share of "wanna-be asynchronus" programming.
...
Its a nice way to make the skill delay work in one line. await Task.Delay(Skill.IntoneDuration); <- thats one of many reasons we picked the async await model on skills.
The [Only registered and activated users can see links. Click Here To Register...] uses the thread pool as well, I don't think I see your point.