Giter Site home page Giter Site logo

Connected clients count about iodine HOT 1 OPEN

yildizsc avatar yildizsc commented on July 4, 2024
Connected clients count

from iodine.

Comments (1)

boazsegev avatar boazsegev commented on July 4, 2024

Hi @yildizsc ,

Thank you for your feedback and input! I might be able to do better on the 0.8.x version (if I ever get there), but currently even Iodine doesn't keep such a list.

The issue with implementing something like Iodine.connections.count is that it is both unreliable and unclear when using the forking feature ... the feature could mean "how many connections in this process?" or "how many connections in the server instance?" or "how many connections globally?"... so it really depends on your use-case.

In addition, there are implementation hurdles that I simple circumvented by not keeping a list of active connections and using other connection access techniques.

For starters, when implementing this - even on a single multi-threaded process - the count might change between the count method returning and the next line of code executing (which means that count will be "fuzzy" at best...

... Theoretically the only reliable data will be on a single threaded server... and even that isn't really true, as there's an additional dedicated IO thread that makes sure that IO operations - such as data write and connection closure - the could happen even when user threads are blocking.

Also, there's the issue of a potentially crushing worker. If some code causes a worker process to crush, Iodine would normally automatically spawn a new worker. In such an instance, old data might persist if synchronizing the Iodine.connections.count across multiple workers.

If I understood your specific use-case I might be able to help more.

If you're looking for a per-server-instance I would consider using Iodine's internal pub/sub system rather than Redis, collecting the data in the root process (PUBLISH2ROOT). You will avoid a lot of overhead by keeping the information in-house.

If you're looking on a per-worker solution, than the on_open and on_close could easily be used to atomically (or using a mutex) incrementing / decrementing a counter.

If fuzzy information is enough, you might be able to simply count the instances of the Connection class using Ruby's ObjectSpace.

Good Luck!
Bo.

from iodine.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.