Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
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 taking refuge in the Monastery: (5)
As of 2014-07-13 05:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (247 votes), past polls