[VoiceOps] Any subscribers from the UK?
Peter Beckman
beckman at angryox.com
Mon Aug 3 16:38:32 EDT 2009
On Mon, 3 Aug 2009, Alex Balashov wrote:
> Peter Beckman wrote:
>
>> First off, calling AGI(somescript.php) is awful.
>
> It is, but most of the broken implementations I am brought in to fix do
> exactly ... that! :-)
I meant to say "I completely agree that ..."
> There is a considerable body of evidence suggesting that although PHP does
> expose a socket API, using it to do sockets is a terrible idea because it
> just doesn't perform well at all. I don't know why anyone would write a
> server - FastAGI or otherwise - in PHP.
I haven't done any tests to see how well or badly PHP does sockets, but
one of my friends and past coworkers who worked with some Zend folk
directly (Zeev, the original author of PHP) said that he wrote some pretty
amazingly fast socket-related tools in PHP. I don't know how many
calls-setups-per-second that might translate to, but I think there is the
possibility that neither of us really knows how best to build a
socket-based long-running PHP daemon that has the stability and
performance that we demand. I suspect it is possible to do at a level
on-par with other FastAGI implementations in other interpreted (not
compiled) languages.
> Besides, PHP does not really have the appropriate low-level dimension for
> heavyweight or nuanced system calls; that's not what it was designed for.
> Then again, I suppose people make that argument for Java, too.
Untrue: http://us.php.net/manual/en/intro.sockets.php
"The socket extension implements a low-level interface to the socket
communication functions based on the popular BSD sockets, providing the
possibility to act as a socket server as well as a client."
PHP is more versatile than many people think. It's not as deep zen as
Perl can be, and there are some frustrating inconsistencies in how PHP
operates, but it can be powerful in a knowledgable programmer's hands.
> Maybe. I suppose it's just hard for me to see, as someone with a programming
> background that almost entirely consists of socket-layer programming and
> network protocol implementation (in C), how PHP - given its architecture -
> can do those things in a scalable fashion even if it does bother to publish
> APIs for the underlying system calls. Managing large amounts of I/O-bound
> processing just isn't what it was built for at all. Even my curl_*() calls
> out of PHP are dog-slow.
I think that maybe PHP has improved since you last used it (or so it
seems). Again, I'm sure there are better ways, but using PHP for FastAGI
is not as bad as you make it seem. Then again, I'm not doing 1,200,000
minutes per day.
> It's a qualitative issue -- "just because you can, doesn't mean you should."
Maybe, but if you are a small mom-and-pop and just need it to work,
reusing already written code for both your web and VoIP applications makes
a lot of sense. And if they do it right, by using a PHP-based FastAGI vs
straight AGI(), it can scale fairly well.
> The real answer lies in robust performance studies and in the details of
> PHP's runtime implementation. I have neither of these annals at my ready
> disposal in order to illustrate that point. There's just a general principle
> that high-level, non-typed web languages aren't designed to participate in
> the same problem domain as general-purpose programming languages and/or
> languages on which systems are built at that lower level of abstraction.
>
> It is within the realm of conception that you could write a virtual machine
> container/hypervisor in PHP, if only the interpreter exposed the system calls
> and other primitives you'd need to pull it off. But it's not done for a
> reason--surely you can agree. (Except perhaps for the novelty/Slashdot factor
> by someone with far too much time on their hands.)
Given a programmer talented in all languages, absolutely.
> Interesting. I've tended to use Asterisk::FastAGI in the past, but it never
> seems to obey my bind port parameter on the initial invocation.
I like Net::Server::Fork because it allows me to HUP to restart (reload
new code) the parent process without touching the child processes, which
means I can put new FastAGI code into production without waiting for no
calls or worrying about disconnecting existing active calls. It is also
stable and have not had problems with it in years.
---------------------------------------------------------------------------
Peter Beckman Internet Guy
beckman at angryox.com http://www.angryox.com/
---------------------------------------------------------------------------
More information about the VoiceOps
mailing list