There's not much difference between .25 and 1 second.
If you're talking soap on each page render, you're probably doing
something wrong anyway; you should have some kind of cache in your web
app.

That's not to say that we won't fix this issue, but we're not in a
rush to do so.
If you're feeling motivated, we'll gladly accept a patch against HEAD
that implements this; otherwise, you'll have to wait until someone is
motivated enough.

--Wez.

On 12/21/05, Andreas Schiffler <[EMAIL PROTECTED]> wrote:
> Hi all,
>
> I am new to php source code hacking, but got into it for a particular
> reason: I need sub-second SOAP request timeouts.
>
> To qualify the reasoning behind this sub-second timeout requirement a
> bit further, let me explain what it is used for: We are implementing a
> system that changes webcontent based on a remote SOAP service (i.e.
> customer database) and we want to never wait more than - say -  250ms
> for this to complete. Currently the best I can do is 1 sec connection
> timeout (in SoapClient() using the connection_timeout parameter) and 1
> sec socket-read timeout (using ini_set() on the default_socket_timeout
> parameter). Assuming the remote SOAP server is down or slow, every
> pagerender with the SOAP request in it would get delayed by at least 1
> sec, which is unacceptable in our case.
>
> BTW, comparing the PHP situation with other SOAP implementations, we
> have typically millisecond timeouts available:
> - Java (apachesoap): milliseconds
> - Java (axis): milliseconds
> - .NET: milliseconds
> - perl (SOAP::Lite): seconds
>
> Currently all socket/connection timeouts in PHP are implemented with
> second resolution. This is an unnecessary limitation in my view and I
> would love for this to be changed in mainstream PHP. I believe the
> effort to do so is minimal and has no impact to the users.
>
> The timeout numbers are usually used to populate a "tv" struct - in the
> current PHP code only the tv.tv_sec is typically set.  So the change
> would simply be to promote default_socket_timeout (and similar
> variables) to a float and use the fractional part to properly populate
> tv.tv_usec with a microsecond number.
>
> In fact I found locations where the default_socket_timeout parameter is
> assumed to be a float (ext/standard/fsock.c - line 66).
> Also this simple code shows the local default_socket_context to accept a
> float parameter:
> <?php
> ini_set("default_socket_timeout",0.5);
> phpinfo();
> ?>
> while ext/standard/file.h - line 113 stores it as a long.
> So a quick review of how this parameter is used throughout the code
> might be a-good-thing (TM) anyhow.
>
> An example implementation of the new, float resulution timeout use for
> the SoapClient/SoapServer is a few lines in ext/soap/soap.c and
> ext/soap/php_http.c as follows:
>
> soap.c
>                 if (zend_hash_find(ht, "connection_timeout",
> sizeof("connection
>                     Z_TYPE_PP(tmp) == IS_DOUBLE && Z_DVAL_PP(tmp) > 0.0) {
>                         add_property_double(this_ptr,
> "_connection_timeout", Z_
>                 }
>
> php_http.c
>
>         if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_connection_timeout",
> sizeof
>             Z_TYPE_PP(tmp) == IS_DOUBLE && Z_DVAL_PP(tmp) > 0.0) {
>           tv.tv_sec = floor(Z_DVAL_PP(tmp));
>           tv.tv_usec = (1000000.0*(Z_DVAL_PP(tmp)-floor(Z_DVAL_PP(tmp))));
>           timeout = &tv;
>         }
>
> Similarly changes in the main PHP code could look something like this
> (assuming the var is a float):
>
> main/streams/transport.c
>
>     default_timeout.tv_sec = floor(FG(default_socket_timeout));
>     default_timeout.tv_usec = (1000000.0 *
> (FG(default_socket_timeout)-floor(FG(default_socket_timeout))) );
>
> The files that need to be changed are limited.
>     grep -c default_socket_timeout ind . -name "*.[ch]" | grep -v :0
> gives
>   ./ext/imap/php_imap.c:4
>   ./ext/standard/file.c:1
>   ./ext/standard/file.h:1
>   ./ext/standard/fsock.c:1
>   ./ext/standard/streamsfuncs.c:2
>   ./ext/openssl/xp_ssl.c:2
>   ./main/streams/transports.c:2
>   ./main/streams/xp_socket.c:3
>   ./main/network.c:2
>
>     grep -c default_socket_timeout ind . -name "*.[ch]" | grep -v :0
> gives
>  ./ext/ftp/ftp.c:2
>  ./ext/curl/streams.c:1
>  ./ext/soap/php_http.c:1
>  ./ext/session/session.c:3
>  ./ext/sockets/sockets.c:5
>  ./ext/standard/uniqid.c:1
>  ./ext/standard/lcg.c:1
>  ./ext/standard/fsock.c:1
>  ./ext/standard/streamsfuncs.c:4
>  ./ext/openssl/xp_ssl.c:2
>  ./main/streams/xp_socket.c:2
>  ./main/network.c:2
>
> Best regards
> Andreas
>
>
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to