Hi,
First, quite a lot of background - and then two questions.
I am contemplating using POE for a server utility intended to be usable on
a number of platforms, including Windows.
The server will be used to support performance testing, by providing shared
variable services that can be accessed from multiple hosts, such as those
acting as agents applying load to the system under test and/or those
monitoring resource usage during the test.
I work in a number of environments, including Linux, Solaris and Windows.
Some customers are Windows-only, others have mixed environments that
include Windows.
So my server utility will need to be runnable under Windows, as well as
various unix-like systems.
One service provided is to wait until a shared variable has a specified
value. The client sends a wait request: the server does not send a response
until the shared variable has attained the specified value. This can be
used as a 'starting gate', making it easy for clients to block until the
starting gate is opened - but it will mean that there may be many hundreds
of (or even a few thousand) clients waiting for their responses.
The server utility can also be run in a distributed mode, with multiple
instances running on different hosts. A client can send its requests to any
instance of the server, although it would usually be best to send it to an
instance running on the same host as the client. Each instance of the
server knows on which server instance each shared variable resides, and
will transparently forward requests to the appropriate instance.
I have already implemented a version of this utility using plain Perl,
starting from the non-blocking TCP server in the Perl Cookbook which uses
IO::Select. But it has grown to be too complex to maintain, and its
reliability is suspect - and it's intrinsically a difficult project to
test. The reliability issues might well be caused by coding errors due to
the complexity: as well the features mentioned above, it provides
distributed mutexes, waits on multiple distributed shared variables,
optional time-outs on waits, and other features.
So now for the questions:
- Is POE a sensible choice for me to re-implement this server,
particularly if it will have to run reliably under Windows? The main
interactions with the OS will be handling TCP sockets: I don't anticipate
having to have to do any explicit threading, process-forking or signal
handling, which should reduce the risks associated with possible flakiness
under Windows.
- What forum would you recommend me to use when I have to seek help or
advice on the POE-specific aspects of the code? I have been enjoying Perl
for over six years, and my programming background includes systems
programming back in the days when operating systems were written in
assembler languages - but I will likely be seeking help so I don't end up
in another dead end after putting even more effort into a project that has
already taken a lot (months?) of my time.
Thanks for your attention this far - and thanks in advance if you feel
inclined to respond.
Derek