Ah, yes - http://php.net/pcntl_fork

Well there you go, then - everything required to create a server in PHP.

miguel

On Tue, 21 May 2002, Evan Nemerson wrote:

> 1st thing: sorry about the double-post. i don't know why that happened. If 
> this one gets double posted too, i apologize in advance.
> 
> 2nd: php.net/pcntl
> 
> On Tuesday 21 May 2002 23:30 pm, 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

Reply via email to