Thanks for the reply Miguel, but here i'm not trying to implement my own multi-threaded server - exactly the reason why i'm using Apache / PHP.
I could have made a listening server which is based on a multi-threaded or multi-forked model, but the time and complexities involved would be huge. Thats why I chose Apache / PHP. Now if what i'm asking for can be done, developers can easily leverage existing efficient server technologies (Apache) to build their own App servers. I know that there is no existing function in PHP that would allow it to retrieve the socket from Apache ;), all i'm asking for is a hack that would allow me to do it. I thought that i'd just as well post it on the mailing list before diving into the source code and trying to figure out for myself. No point trying to re-invent the wheel, right? Evan, that lib will allow me to create my own packets, but which socket do i send it to? Thats been the question all along. I think this is getting really interesting :) Tx, Vinod. On Wed, 22 May 2002 Miguel Cruz wrote : >I don't think you're going to get Apache to hand you the >socket. > >However, you can write a program using the standalone (CGI) PHP >interpreter that will act like a server - check out >http://php.net/socket_create_listen for more info. > >You could redirect from your standard web server to your >listening PHP app >running on another port. You'll then have to implement at least a >subset >of the HTTP protocol in order to get browsers to talk to you. > >Unfortunately, since you can't - to the best of my knowledge - >fork a PHP >program, you're going to have to do your own homebrew threading >which will >make life slightly complicated. > >miguel > >On 22 May 2002, Vinod Panicker wrote: > > 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. > > > > > > Tx, > > Vinod. > > > > 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 > > >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? > > >>> > > > > > > > > > > > > > > >-- 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 > > Abroad > > http://monsterindia.rediff.com/jobs > > > > > > > > >-- >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 Abroad http://monsterindia.rediff.com/jobs -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php