Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^6: Creating Socket Connections that are persistent across multiple page loads in a single web session

by unlinker (Monk)
on Jan 05, 2011 at 09:57 UTC ( #880561=note: print w/ replies, xml ) Need Help??

Comment on Re^6: Creating Socket Connections that are persistent across multiple page loads in a single web session
Re^7: Creating Socket Connections that are persistent across multiple page loads in a single web session
by gman (Friar) on Jan 05, 2011 at 12:08 UTC

    I have done this using the POE framework. I keep a persistent connection to two tcp servers and marshal all CGI connections through them, keeping track using unique Ids and using JSON for passing the data between them.

    use POE qw(Component::Schedule Filter::Reference Component::Server::TCP Component::Client::TCP Filter::Line Component::Log4perl Component::Daemon );

      Thanks for the suggestion. Have not used POE before (but have read a bit about it in Simon Cozens book "Advanced Perl Programming") so will pass it for now, in favour of a simple Dancer function that hands out sockets to requestors. This function keeps track of which socket belongs to which requestor using a hash whose keys are session ids. If the session id is a key in the hash it just hands out the corresponding socket, if not it creates a new one, records it in the hash and hands it out. Since I run the Dancer app under Starman, I believe the handed sockets would be persistent.

      Would POE give me a more robust solution than this obviously simplistic method? If yes, I would love to give it a go.

        I am unfamiliar with Dancer, is this the method used or an application? I have had my POE app in production for about 3 months now with %100 uptime. My first thought was to use threads, I have done similar in Java. But never used POE before, so thought I would give it a try and keep the site all perl. I send a keep alive every so many seconds to each server, and have a very low query rate. Currently I run about 150 query a day and each one make several exchanges with the servers for each query.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://880561]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2015-07-05 14:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls