Skip to main content

What is best choice for realtime web app development?


I have decided to make a new web app.



The web app would be high concurrency and using Socket.io. to implement streaming data in realtime.



I have implemented socket.io with PHP before.



Every moves in website will be Ajax processed and its behavior and actions will interact with server by socket.io.



I'm familiar with PHP and Apache2 but I have heard that those two are not efficient and good enough for realtime web app.



Socket.io is a Node.js module and I know that it is super-fast and highly scalable but I'm so curious that it changes version too rapidly (0.6.x - stable version came out recently) to adapt it as production one.



I'm considering 4 choices and I don't know which one would fit to me.



  • PHP + Apache2 + mongoDB

  • PHP-mpm + nginx + FastCGI + mongoDB

  • node.js + mongoDB

  • nginx (as proxy) + node.js + mongoDB (I know that nginx does not support HTTP 1.1, so socket.io would not work, a critical problem)



or any other recommendation on choosing architecture?


Source: Tips4allCCNA FINAL EXAM

Comments

  1. I would use the following configuration:


    Nginx for serving static files ( http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile << read the section about serving static files)
    Node.js under Nginx for dynamic regular stuff (except realtime Socket.IO) - Ryan Dahl (Node.js creator) even recommended this
    Socket.IO for realtime, since it abstracts away all the websocket logic, has some advanced (and really needed) features (like heartbeats for example). Socket.IO even takes care of browsers that don't support native WS, by using Flash-WS or long-polling etc. (your stuff would even work on IE6 lol)
    Since you know Nginx doesn't play well with HTTP 1.1, WebSockets (allthough I've heard there are some plugins for that), you could use something else for that: Node.js directly or some other proxy ( node-http-proxy or bouncy are 2 Node solutions for proxying).

    ReplyDelete
  2. First recommendation is "define 'realtime'". Do you mean the data seen by the viewer can be as much as 5 seconds behind? 1 minute? 5 minutes? Or on the other side, 0.1 seconds? (nearly impossible to guarantee in a web app and hard in an internet app.) 0.01 seconds (now you're pushing the limits of message propagation on the internet.)

    Also, how many concurrent users? 10, 100, 10,000?

    ReplyDelete
  3. I suggest to use lighttpd. I think it's also very stable but I don't know about the other programs. Maybe you want to rent a loadbalancer and focus on the usuability and marketing instead? Lighttpd and fast-cgi is better then apache.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.