But I have to face some unhappy facts: I don't know enough about threading ...
But you do know enough about multiplexing processes via pipes or unix-domain sockets; or attaching shared memory segments in order to solve those problems?
With regard to the potential barriers you perceive to a threaded solution:
what's necessary to keep the thread memory consumption from ballooning out of control
Why do you think this would happen?
There are two ways memory consumption grows out of control:
how to handle corner cases that I've yet to identify with the creation of a highly-available multi-threaded network service.
I don't know how to handle unidentified problems either.
But generally, if and when a problem is identified, it usually has an obvious and simple solution.
I don't yet know gracefully kill off threads that get "stuck" without resorting to a SIGKILL
There is no such thing as a "graceful kill".
Needing to kill a thread (rather than either asking it to die or allowing it to come to a 'natural death') is a really bad design technique. One of absolutely last resort when all other options fail. Design properly and it should never be necessary.
With a server, the primary problem is one of ensuring that you never enter a read state to a socket unless there is data available.
Under windows, where Perl doesn't provide access to the appropriate low-level IO routines to allow reads to be interrupted, that pretty much forces a polling (select or IO::Select) server design. That's a pain because it means implementing line or block buffering yourself; but it's not terribly hard. And if you strictly limit your select groups to just one or two handles per thread, each thread can still deal with just one client and its remote proxy thus avoiding the need to put all your pipes through a single central loop.
Under *nix, I've been told that read & readline are interruptible using alarm, so you should be able to avoid polling whilst still retaining the guarantee that if a client goes away, you won't leave a thread stuck. (But I don't have the experience to back that up, nor the environment to test it.)
But, it's your project and your call. You have to decide which set of skills are going to be easiest for you to acquire; which probably comes down to which route to your goal you will get most support in pursuing.
From my perspective, the most daunting part of your task is the webserver/AJAX client bits, of which I have little to no knowledge, and for which I am not set up nor have any desire to be so.
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
Are you posting in the right place? Check out Where do I post X? to know for sure.
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
Want more info? How to link
or How to display code and escape characters
are good places to start.