• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Team PyOT

Amiroslo

Excellent OT User
Joined
Jul 28, 2009
Messages
6,767
Solutions
5
Reaction score
769
Hello OTLanders,
I am sure many of you have heard of PyOT before. Keep reading if you haven't.

What is PyOT?

PyOT is a server written in Python, using Tornado framework that emulates the Tibia protocol.

PyOT is super fast, and uses different methods than other projects. Some of which is:

  • Async SQL
  • Async core code
  • Async scriptsystem
  • Ability to utilize the best reactor designs (epoll (Linux), iocp (Windows) and kqueue (FreeBSD))
  • Ability to utilize JIT using PyPy
  • Very flexible core
  • Very configurable core
  • Very fast save format (save takes from less than 0.1ms to 0.3ms per player, scales over several sql connections, allowing for upto 10k saves per second)
  • Sector maps, dynamic load and unload for optimal memory usage (down to ~50MB on 64bit after login! (32bit can expect around half)) (*Multilingual mode may require more)
  • Support for instances or even having multiple worlds on one server!
  • Support for multiple languages (at the same time, now each individual account can have their own language!) (*all server sided messages, client UI is a different matter)
  • Ability to dynamically script maps and custom items!


PyOT is in Alpha1. The Author is Stian. It was created December 10, 2012. PyOT later was abandoned due to lack of team members and the fact that people are looking for something more download and run so it did not grab attention.

Today I am here to recruit members to work on PyOT again.

PyOT is open-source, repository can be found here:
PyOT - Github

This is a free project which means you will not get paid to do the work. Not very interesting right?

If you would like to apply please send me a PM, or add me on Skype so we can talk more about this.

More information will be provided ones you contact me.

Thank you

You can join us to discuss more about this on our discord server:
Discord
 
Last edited:
I agree with this if this new team will try to do things that are really far to be implemented in the TFS project. A project to prototype new things. Also not copying Tibia gameplay would be great.
 
I agree with this if this new team will try to do things that are really far to be implemented in the TFS project. A project to prototype new things. Also not copying Tibia gameplay would be great.
If you or anyone is interested in discussing this and joining it let me know via PM. Much more can be discussed as this is just a job thread and not a discussion.

Spriters/Graphic Designers are welcome, we can get rid of tibia sprites. That's the only copyrighted thing right now from PyOT side.

Great to see some interest.
 
If you or anyone is interested in discussing this and joining it let me know via PM. Much more can be discussed as this is just a job thread and not a discussion.

Spriters/Graphic Designers are welcome, we can get rid of tibia sprites. That's the only copyrighted thing right now from PyOT side.

Great to see some interest.

I dont really know to much but this project sounds very interesting and i would like to help any way possible.

I have seen your past work Amiroslo and its very impressive i would work on any project with you.
 
I dont really know to much but this project sounds very interesting and i would like to help any way possible.

I have seen your past work Amiroslo and its very impressive i would work on any project with you.
Glad to know. PM me or add me on Skype so we can have a better talk!
 
I have never tried Python myself, so I can't say much about it, but are the things you wrote in the thread accurate?
specially the saving thing.. "save takes from less than 0.1ms to 0.3ms per player".
Since in my eyes, saving 1 player in 0.1 ms is pretty slow IMO.

My DarkOT 7.4 server is written in C++ and have more or less ancient saving system, I've just adjusted it the last year to speed it up a bit since the old saving was bit too slow.
So now at 350 players online the game saves between 0.01 - 0.03 seconds, and that's only saving the players then, not houses or anything else.

And in Thorsan, which is also written in C++ but there I designed it a lot better with saving, it can save 600 players in less than 0.015 seconds flat, never above 0.015.
(This happens OFC on SSD disks, on SATA it save with the mentioned speed * 3-4)
So those with C++ can save incredible fast if done correctly, so that make me wonder, is those numbers you mentioned accurate? o_O
 
I have never tried Python myself, so I can't say much about it, but are the things you wrote in the thread accurate?
specially the saving thing.. "save takes from less than 0.1ms to 0.3ms per player".
Since in my eyes, saving 1 player in 0.1 ms is pretty slow IMO.

My DarkOT 7.4 server is written in C++ and have more or less ancient saving system, I've just adjusted it the last year to speed it up a bit since the old saving was bit too slow.
So now at 350 players online the game saves between 0.01 - 0.03 seconds, and that's only saving the players then, not houses or anything else.

And in Thorsan, which is also written in C++ but there I designed it a lot better with saving, it can save 600 players in less than 0.015 seconds flat, never above 0.015.
(This happens OFC on SSD disks, on SATA it save with the mentioned speed * 3-4)
So those with C++ can save incredible fast if done correctly, so that make me wonder, is those numbers you mentioned accurate? o_O
I can't answer this as I myself did not try and run PyOT yet or host a test server. Theses information was provided by Stian. Not many tests were done as the project did not last very long. The only way to to make sure wether it is actually true or not is by testing it. So for now, I can not state wether it is true or not. Hopefully we will see if it is correct or not soon.

@OpenTibiaServer
Edit: According to Stian,
All 10k queries to the server are sent at once, we don't do one query at a time, thats a huge save since SQL is generally slow to respond. Basically the save on PyOT doesn't care about the sql server response time.
Also, most of the game servers, huge games like EVE Online (written in python too btw) uses a similar design to PyOT, and it runs just fine with 10k players.

Keep in mind 0.1ms was benchmarked on a 2010 server back in the days.
 
Last edited:
I can't answer this as I myself did not try and run PyOT yet or host a test server. Theses information was provided by Stian. Not many tests were done as the project did not last very long. The only way to to make sure wether it is actually true or not is by testing it. So for now, I can not state wether it is true or not. Hopefully we will see if it is correct or not soon.

@OpenTibiaServer
Edit: According to Stian,
All 10k queries to the server are sent at once, we don't do one query at a time, thats a huge save since SQL is generally slow to respond. Basically the save on PyOT doesn't care about the sql server response time.
Also, most of the game servers, huge games like EVE Online (written in python too btw) uses a similar design to PyOT, and it runs just fine with 10k players.

Keep in mind 0.1ms was benchmarked on a 2010 server back in the days.
Queries are always slow, considering the program speed :)
 
All 10k queries to the server are sent at once, we don't do one query at a time
So... in order to do that, you need to open 10k simultaneous connections to MySQL. That's very interesting, considering that even well optimized MySQL servers would have a connection limit of at most 500-1000 simultaneous connections (due to RAM limits/use per connection).
 
The
So... in order to do that, you need to open 10k simultaneous connections to MySQL. That's very interesting, considering that even well optimized MySQL servers would have a connection limit of at most 500-1000 simultaneous connections (due to RAM limits/use per connection).
The maximum number of connections MySQL supports depends on the quality of the thread library on a given platform, the amount of RAM available, how much RAM is used for each connection, the workload from each connection, and the desired response time. Linux or Solaris should be able to support at least 500 to 1000 simultaneous connections routinely and as many as 10,000 connections if you have many gigabytes of RAM available and the workload from each is low or the response time target undemanding. Windows is limited to (open tables × 2 + open connections) < 2048 due to the Posix compatibility layer used on that platform.

Edit: You can also take a look at this: @Don Daniello
500 Million hits/day with Nginx + PHP-FPM + MySQL - Query Admin
 
Last edited:
The

The maximum number of connections MySQL supports depends on the quality of the thread library on a given platform, the amount of RAM available, how much RAM is used for each connection, the workload from each connection, and the desired response time. Linux or Solaris should be able to support at least 500 to 1000 simultaneous connections routinely and as many as 10,000 connections if you have many gigabytes of RAM available and the workload from each is low or the response time target undemanding. Windows is limited to (open tables × 2 + open connections) < 2048 due to the Posix compatibility layer used on that platform.
Take mysqltuner.pl and run it on a server configured to support 1000 connections. Check the total theoretical RAM usage. It will be way too high. It won't be safe to run the server like that. There's no benefit to that because if those connections were truly used, you'd run out of memory. It would actually be faster to just queue the queries. Database engine is complicated software and queries can't always run in parallel - it depends on the query type, storage type, etc.

In the case of saving players, simply authenticating 1000 times over 1000 distinct connections just to run 1 query to save 1 player to the database would take longer than reusing an existing connection and session. Surely, a connection pool can help but definitely not in the 1:1 connection to query ratio.
 
Is this a discussion thread or a job thread? Sounds like you're having an off topic discussion and this can be taken over pm
It's a forum. Every thread is a discussion thread. Making dubious statements about certain software requires verification and leads to debate. That's what we do here. It's not off topic.
 
Is this a discussion thread or a job thread? Sounds like you're having an off topic discussion and this can be taken over pm
It would be offtopic if they suddenly started to talk about what cake goes best with ice cream :p
As far they're discussing about the main topic, it's fine :D
 
Correction:
PyOT uses tornado framework now. It was changed at some point because twisted didn't support python 3 at that time.
 
Still looking. All kind of skills are welcome.
 
Back
Top