It still seems like I havent made the problem clear enough.
I am aware of the print(), echo() and flush() functions and what
they do. It does not fit in as a solution. Let me explain my
problem more elaborately -
The client calls a PHP script, script_a.php on the Apache web
server, using a Keep-Alive connection. The script returns some
response to the client which it uses. Now since the connection is
a Keep-alive, apache still has it open for reading and writing.
When the client wants to call other scripts, it just sends the
request over the same connection. Now the thing is that if the
server needs to send some ASYNCHRONOUS data to the client, without
the client requesting for anything, a normal PHP script wont be
able to do it, since the script would get executed by the web
server ONLY on a client request (coz thats the way HTTP works).
Now what i was thinking was - if i could get hold of the socket
that is being used by apache to send data to the client, I could
effectively write() to it, from a C++ app or a PHP script (which
gets invoked from lets say another server). print(), echo() etc
are functions that write to the output stream, which is opened as
a result of the clients request, by the web server.
I want the ability to write to a socket thats been created earlier
- i want to steal it from Apache, so that i can use it when and
where i like.
Functions like echo() and print() are not going to work here, i
will have to use write() so that i can specify the socket to which
the data has to be written!
Hope the problem is understood now.
Now for your question -
When the client wants to send data to the server, it just has to
open a socket connection with the web server, and issue a GET or a
POST request! if the connection is a keep-alive connection, and
it has already been created, the client just has to do a GET or a
POST without the need to connect().
This mechanism, where the client frequently connects() to the
server and checks for messages is called polling. One way of
reducing the high overhead of this is to reuse the connection by
using a keep-alive connection. A still better improvement would
be to remove the need for a poll altogether, by doing something
(thats what my question is all about) on the server so that it can
send data asynchronously to the server.
On Wed, 22 May 2002 Bogdan Stancescu wrote :
>For your specific problem, I think Mr. Lemos has provided a
>viable solution (using print() or echo() and flush() whenever you
>need to, instead of grabbing the socket and write() to it). My
>problem however is how you envision solving the communication the
>other way around (i.e. when the CLIENT wants to send data to the
>Vinod Panicker wrote:
>>Tx for your very prompt reply.
>>Yeah, I'll post the solution as soon as I find it someplace.
>>Let me outline the problem in more detail -
>>Client (VC++) calls a PHP script on the server, specifies the
>>connection type as Keep-Alive. The PHP script, somehow (still a
>>big question) gets the socket on which the apache server has
>>received the client request (so that it can send data to the
>>client later) and stores it in a database.
>>Now whenever another PHP script wants to send data
>>asynchronously to the client, it gets the socket from the
>>database, and just calls a write() on it. Since the connection
>>is still open (Keep-Alive), the client receives the information,
>>and doesnt have to poll the server periodically.
>>The application of this is indeed destined for a messaging
>>product, and could benefit a lot of other areas as well.
>>The only thing that is needed is the socket from apache.
>>Someone somewhere knows how to get this done, i'm sure :)
>>Possibly a hack into the PHP module can get this done, i'm open
>>On Tue, 21 May 2002 Bogdan Stancescu wrote :
>>>I'm looking for an answer to your questions as well, so if you
>>>do find a solution on other lists, could you please post it
>>>here as well?
>>>Regarding the issue, your proposal wouldn't make for
>>>full-duplex as far as I understand since I don't see how the
>>>client would be able to send any data on the same connection
>>>_after_ getting connected.
>>>What are you using on the other end of the pipe (on the
>>>client)? Plain HTML? Flash? Java? Something else?
>>>Vinod Panicker wrote:
>>>>We have developed a client-server application where the server
>>>>needs to send asynchronous data to the client. Now since we
>>>>are using Apache/PHP/MySQL, the client needs to poll the
>>>>server periodically for information.
>>>>I was thinking if there was some way to get around this basic
>>>>problem. I understand that this is how things are supposed to
>>>>work, but it would be just great if i could PUSH data from the
>>>>server to the client, using HTTP.
>>>>Since HTTP is a request/response based protocol, Apache would
>>>>not send any data to the client asynchronously. So what i was
>>>>thinking was - If i tell the server to allow Keep-Alive
>>>>connections, and increase the timeout value and max requests,
>>>>I would effectively have a constant TCP connection. Now the
>>>>only problem would be of sending asynchronous data to the
>>>>client. Solution? Here goes - If there was some way in which
>>>>i could get hold of the file descriptor(socket) that is being
>>>>used by apache to write data to the client, then i could, from
>>>>a PHP script also send any data to the client using the socket
>>>>functions of PHP since i already have the socket with me.
>>>>This would mean that the client doesnt have to poll the server
>>>>for data any more... and if the connection does get closed,
>>>>the client could reconnect to the server asking for another
>>>>Now I know that this is probably the wrong place to put such a
>>>>query - maybe the apache list would have been better. But
>>>>since I'm using PHP out here, i thought i'd give it a try.
>>>>Does the solution sound very outlandish? Are there any
>>>>pitfalls? And finally, how do i get hold of the socket?
>-- PHP General Mailing List (http://www.php.net/)
>To unsubscribe, visit: http://www.php.net/unsub.php
Click below to visit monsterindia.com and review jobs in India or
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php