Re: Full-Duplex communication
| From: | Bogdan Stancescu | Date: | Tue, 21 May 2002 21:33:58 +0000 |
| Subject: | Re: Full-Duplex communication | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-98661@lists.php.net to get a copy of this message | ||
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 server).
Bogdan
Vinod Panicker wrote:
Hi, 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 to suggestions. Tx, Vinod. On Tue, 21 May 2002 Bogdan Stancescu wrote :Hi! 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? Bogdan Vinod Panicker wrote:Hi, 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 keep-alive connection. 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?