http://qs1969.pair.com?node_id=1076437


in reply to Simultaneously reading from a file and serving data

Have you looked at IO::Select? It will allow you to have a loop which is "simultaneously" waiting for input from multiple sources and waiting for outputs to become ready for write and allowing for timeouts. Or you could use the underlying select call.
  • Comment on Re: Simultaneously reading from a file and serving data

Replies are listed 'Best First'.
Re^2: Simultaneously reading from a file and serving data
by sundialsvc4 (Abbot) on Feb 28, 2014 at 13:30 UTC

    select is definitely how I would do it, for several key reasons:

    1. It is architecturally uncomplicated:   the process is actually doing only one thing at a time, even though it is unpredictable what it might do next.
    2. You never have to worry about things being incomplete ... about accidentally sending someone a partial-message that you haven’t finished reading yet.
    3. You can easily prioritize what it is doing, according to the business requirement.
    4. Messy timing issues are generally avoided completely.

    The program itself is really a dispatcher, connected to everything else with nice, flexible pipes and sockets.   It goes to sleep, wakes up with a “honey-do list,” does its chores in whatever sequence it best sees fit, then goes back to sleep again.   As long as none of these things take a significant time to actually do, esp. relative to the others, it all works great.