Nice! We keep a single connection open using the standalone gem.
But yeah you're right it would be an issue if you were connecting to Apple's servers in a resque worker for example, since the socket would be opened in a new child for each job. I bet you could get around this though by opening a socket in the parent and using it in each child process. Reconnecting might be a little trickier though.
apnmachine looks pretty sweet. I'll have to check it out if I need something like that in the future.