I’ve got a small php web app I put together to automate some manual processes that were tedious and time consuming. The app is pretty much a GUI that ssh’s out and “installs” software to target machines based off of atomic change #’s from source control (perforce if it matters). The app currently kicks off each installation in a new popup window. So, say I’m installing software to 10 different machines, I get 10 different pop ups. This is getting to be too much. What are my options for kicking these processes off and displaying the results back on one page?
I was thinking I could have one popup that dynamically created divs for every installation I was kicking off, and do an ajax call for each one then display the output for each install in the corresponding div. The only problem is, I don’t know how I can kick these processes off in parallel. It’ll take way too long if I have to wait for each one to go out, do it’s thing, and spit the results back. I’m using jQuery if it helps, but I’m looking mainly for high level architecture ideas atm. Code examples are welcome, but psuedo code is just fine.
I don’t know how advanced you are or even if you have root access to your server which would be required, but this is one possible way.. it uses several different technologies, and would probably be suited for a large scale application rather than a small. But I’ll advise you on it anyway.
Following technologies/stacks are used (in addition to PHP as you mentioned):
What you would do, is from your client (so via JavaScript), when the page loads, a connection is made to node.js via WebSockets ) you can use something like socket.io for this).
Then when you decide that you want to do a task, (which might take a long time…) you send a request to your server, this might be some JSON encoded raw body, or it might just be a simple
GET /do/something. What is important is what happens next.On your server, when the job is received, you kick off a new job to Gearman, by adding a Task to your server. This then processes your task, and it will be a non blocking request, so you can respond immediately back to the client who made the request saying “hey we are processing your job”.
Then, your server with all of your Gearman workers, receives the job, and starts processing it. This might take 5 minutes lets say for arguments sake. Once it has finished, the worker then makes a JSON encoded message which it sends to your node.js server which receives it via
JSON-RPC.After it grabs the message, it can then emit the event to any connections which need to know about it via websockets.
I needed something like this for a project once and managed to learn the basics of node.js in a day (having already a strong JS background). The second day I was complete with a full push/pull messaging job notification platform.