Giter Club home page Giter Club logo

frug / ajax-chat Goto Github PK

View Code? Open in Web Editor NEW
547.0 110.0 304.0 3.33 MB

A fully customizable web chat implemented in JavaScript, PHP and MySQL which integrates nicely with common forum systems like phpBB, MyBB, FluxBB, SMF and vBulletin. A Flash and Ruby based socket connection can be used to boost performance.

Home Page: http://frug.github.io/AJAX-Chat/

CSS 7.39% PHP 47.92% JavaScript 33.68% ApacheConf 0.02% HTML 5.40% Shell 0.15% Ruby 1.73% ActionScript 3.71%
ajax-chat vbulletin mybb php php7 chat

ajax-chat's Introduction

AJAX Chat Standalone

This is the standalone version of Blueimp's AJAX Chat. If you are looking for a version to integrate with your forum, select a different branch.

AJAX stands for "Asynchronous JavaScript and XML". The AJAX Chat clients (the user browsers) use JavaScript to query the web server for updates. Instead of delivering a complete HTML page only updated data is sent in XML format.

By using JavaScript the chat page can be updated without having to reload the whole page.

Requirements

Server-Side Client-Side
PHP >= 5 Enabled JavaScript
MySQL >= 4 Enabled Cookies
Ruby >= 1.8 (optional) Flash Plugin >= 9 (optional)

Features

  • Easy installation
  • Usable as shoutbox
  • Multiple channels
  • Private messaging
  • Private channels
  • Invitation system
  • Kick/Ban or Ignore offending Users
  • Online users list with user menu
  • Emoticons/Smilies
  • Easy way to add custom emoticons
  • BBCode support
  • Optional Flash based sound support
  • Optional visual update information (changing window title)
  • Clickable Hyperlinks
  • Splitting of long words to preserve chat layout
  • Flood control
  • Possibility to delete messages inside the chat
  • IRC style commands
  • Easy interface to add custom commands
  • Possibility to define opening hours for the chat
  • Possibility to enable/disable guest users
  • Persistent client-side settings
  • Multiple languages (auto-detection of ACCEPT_LANGUAGE browser setting)
  • Multiple styles with easy layout customization through stylesheets (CSS) and templates
  • Automatic adjustment of displayed time to local client timezone
  • Standards compliance (XHTML 1.0 strict)
  • Accepts any text input, including code and special characters
  • Multiline input field with the possibility to enter line breaks
  • Message length counter
  • Realtime monitoring and logs viewer
  • Support for unicode (UTF-8) and non-unicode content types
  • Bandwidth saving update calls (only updated data is sent)
  • Optional support to push updates over a Flash based socket connection (increased performance and responsiveness)
  • Survives connection timeouts
  • Easy integration into existing authentication systems
  • Sample phpBB3, MyBB, PunBB, SMF and vBulletin integrations available
  • Separation of layout and code
  • Well commented Source Code
  • Developed with Security as integral part - built to prevent Code injections, SQL injections, Cross-site scripting (XSS), Session stealing and other attacks
  • Tested successfully with Google Chrome, Firefox, Opera and Safari - built to work with all modern browsers :)

Help

Essential documentation is contained in the attached readme files

For more documentation consult the github wiki: https://github.com/Frug/AJAX-Chat/wiki

For support questions use google groups: https://groups.google.com/forum/#!forum/ajax-chat

To report bugs use github issues: https://github.com/Frug/AJAX-Chat

ajax-chat's People

Contributors

bmanolov avatar bomdia avatar clintharrison avatar codincat avatar frug avatar jamrial avatar jugolo avatar marquisite avatar mrschism avatar sophist-uk avatar tribut avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ajax-chat's Issues

Xenforo Forum integration.

I am looking into adding a chat to my forum but i don't use any of the forum software that support this chat. I saw this on planetminecraft, and thought it may be a lot better to use this as i can give my mods the ability to moderate chat. Would you mind adding support for Xenforo? I would really appreciate it. :)

Turn off bots

Is there a way to turn off the chat bots? We are going to use this for at my job but the bots are kind of annoying for our purpose.

Handle logout on browser windows/tab close

Correct me if I'm wrong, but on the integration version I'm working on right now, a user who closes his window without issuing the '/quit' command, remains in the online list until timeout if other users are connected, or permanently until a new one connects if he was the last online user.

This issue makes sense due to the server being updated only by peer clients, if I'm understanding AJAX Chat architecture correctly.

What I propose is to launch the ajaxchat.logout() function within the <body> element onunload event.

So in the loggedIn.html template, replace

<body>

with

<body onunload="ajaxChat.logout();">

This could raise compatibility issues, but as far as I can tell it works for me in Chrome 24 and in IE8.

Other issues are when a user opens multiple ajaxchat windows: once he closes a windows, the other windows will show both disconnect & reconnect messages. I don't know how this can be handled properly.

vBulletin Integration - Renaming Forum breaks chat

Hello. I run the vB integrated chat and have a few forums integrated into the chat (via their forumids). If I rename one of these forums with vBulletin's control panel, they will disappear from the chat's channel list, even though the forumid will never change. Any idea why this may be occurring? I've tried to "reset" it by removing and re-adding the forumid in '$config['limitChannelList'] = array(1,2);' in config.php but this will not make it re-appear. If I go back to vBulletin control panel and restore the old forum name, it will once again be available in chat.

Prevent vBulletin from timing out chat users

Chat activity doesn't prevent vBulletin from automatically timing out users from the forum side. This logs out members who are in the chat, forcing them to have to constantly keep logging back in. Is there a way to prevent this?

PHP 5.4 incompatibility

The script doesn't work on PHP 5.4.
So many Strict violation error.
This is an example of them:
Strict Standards: Non-static method AJAXChatString::subString() should not be called statically, assuming $this from incompatible context in D:\localhost\test-AJAX-Chat\chat\lib\class\AJAXChat.php on line 2797

Ban and Kick should be different

The kick command should use the usual timer to remove people from chat briefly, while the ban command should permanently block their IP until it is explicitly removed.

Ability to see actual username when a user does a /nick username change

With Integrated Instances of AJAX Chat (in my case with PHPBB3), It would be nice to have the ability to determine what the actual registered username is when a user changes their display name using the /nick feature. As it is now there is no way to tell what their actual forum username is once they change their display name.

Sign Up And Forgot Password

Hello guys !

I want to add sign up and forgot password facility into the current app. How can i do that ? Thanks

has been logged out (Invalid IP address).

I'm using the stand alone version. I have had the 500, 508, and 503 errors being reported and a convo with my host tech support yielded no results. Today, however, I'm getting logged out automatically with the following message.

username has been logged out (Invalid IP address).

It's happened twice thusfar. Any clue as to why this is happening?

Request for Toast Notifications

I would like to know if it is possible to integrate toast notifications like in Gmail.
i want the users to a get a pop up notifications of a new incoming message.

Installation

Installing on a bluehost hosted site. When I navigate to http://cocreativeculture/punbb/chat/install.php I get the following error:

The constant FORUM_ROOT must be defined and point to a valid PunBB installation root directory.

Where is this variable defined or is it supposed to be generated?

Handle timeouts and window closing better

Add an option to ask users if they're sure they want to close the window without using the logout button. This seems to be a standard practice with ongoing ajax requests these days.

Also add a call to checkAndRemoveInactive() on the loggedOut page to clear up timed out users before someone enters an empty chat room.

Better advice and examples for how to call checkAndRemoveInactive() from other scripts or as a cron job should go in the wiki or be added as a simple include file.

Tab complete usernames

I put together a tab complete function for my chat and figured I would share with the community.

It will tab complete after using at least the first 3 chars of a username (has to start from the beginning). It also ignores case and "(" during the search.

Feel free to use or comment on the code.

I changed loggedIn.html to use onkeydown vs onkeypress and had it call my custom function.

<textarea id="inputField" rows="1" cols="50" title="[LANG]inputLineBreak[/LANG]"  onkeydown="ajaxChat.handleInputFieldKeyDown(event);" onkeyup="ajaxChat.handleInputFieldKeyUp(event);"></textarea>

and added the following to custom.js

ajaxChat.handleInputFieldKeyDown = function(event) {
    // Capture Enter to send message
    if(event.keyCode == 13 && !event.shiftKey) {
        this.sendMessage();
        try {
            event.preventDefault();
        } catch(e) {
            event.returnValue = false; // IE
        }
        return false;
    }
    // Capture Tab to complete names
    else if(event.keyCode == 9 && !event.shiftKey) {
        // get text box content
        var text = this.dom['inputField'].value;
        if(!text) {
            try {
            event.preventDefault();
            } catch(e) {
            event.returnValue = false; // IE
            }
        return false;
        }

        if(text) {
            // check for last word
            var n = text.lastIndexOf(" ");
            if (n >=0){
                var term = text.substr(n+1);
                var m = false;
                }
            else {
                var term = text;
                var m = true;
            }
            //only look for 3 or more chars
            if (term.length > 2){
                // loop through userNamesList for match
                for (var i = 0; i < this.userNamesList.length; i++) {
                    // search for usernames from beginning and case insenstive
                    if(this.userNamesList[i].replace("(","").toLowerCase().indexOf(term.toLowerCase()) == 0){
                        // check to see what part of the string needs to be updated
                        if (m){
                            // replace entire line
                            this.dom['inputField'].value = this.userNamesList[i];
                        }
                        else {
                            // replace just term (use sub to avoid duplicate matches)
                            this.dom['inputField'].value = text.substring(0,n+1) + this.userNamesList[i];
                        }
                    }
                }
            }       
        }
        try {
            event.preventDefault();
        } catch(e) {
            event.returnValue = false; // IE
        }
        return false;
    }       
    return true;
}

Disable unregistered logins.

I need to disable unregistered users login.
In default configuration, if user doesn't provide a password he can enter with only a username to public area. Is it possible to make all chats private? Or disabling login without a password?

REQUEST

I know i posted in issues but can the channels used from the forum be chosen or does it have to be all of them?

Saving room messages as a log

I know that messages are saved into Mysql tables with timestamp and userid.

But I need to save room conversation.
Is it possible to save all messages in a chat room, by changing some config ?

Or should I enter to chat room, copy and paste all data into a txt file by hand?
Thank you

Chat logs

Does chat records recorded automatically in this script ?
Or can it be customized easily?

Configure Ajax Chat title

Please provide possibility in configuration to set title for the chat window different then default one (AJAX Chat).

Make functions static

Taken from: https://groups.google.com/forum/#!topic/ajax-chat/lZ4xyieZNRk

Numerous functions in ajax chat are called as though they are static, but are not declared static.

This triggers notices in newer version of php and can be fixed by adding the public static keywords in front of all affected functions.

This is a really easy fix. My only concern is that some older version of php won't handle public static function declarations and break. I'd like to find out what versions might not support such functions and bump the required version of php if needed.

So far I can't find anything suggesting php didn't support these functions in past versions so it should be fine.

iPad keyboard prevents to see existing messages in channel

I use standalone latest version of AJAX chat.
I use this script in my iPad;
Inside a channel, when I tap to the bottom input line, keyboard appears in the bottom of the screen.
But the problem is, top of the page scrolls up and I can't see existing messages in channel.
I only can see empty part of channel.
When I send new message, keyboard disappears and I see old and latest messages.
What should I do to see old messages, when writing some text?
Thank you

2 bugs with PHP Strict Standards

Hello

I have this 2 errors :

PHP Strict Standards: Non-static method AJAXChatEncoding::getSpecialChars() should not be called statically, assuming $this from incompatible context in /home/admin/domains/.com/public_html/fluxbb/chat/lib/class/AJAXChatEncoding.php on line 81, referer: http://www.***.com/fluxbb/index.php

PHP Strict Standards: Non-static method AJAXChatEncoding::encodeSpecialChars() should not be called statically, assuming $this from incompatible context in /home/admin/domains/.com/public_html/fluxbb/chat/lib/class/AJAXChat.php on line 2874, referer: http://www.***.com/fluxbb/index.php

Dedicated sound for receiving private messages (with code samples)

I think having a separate sound when a private message (whisper) is received would be a great idea to improve AJAX Chat. Maybe the chat becomes busy, or your attention is on another matter so you've turned off the sound for standard messages. By having a different sound it is more difficult to miss a private chat message in these scenarios.

I have implemented this in one instance of AJAX Chat successfully, and I've included the code changes below, however there might be a better way to do it, or it might not work at all with your instance of AJAX Chat. This worked for me but I suggest testing this privately and I won't accept responsibility if it breaks your chat (take a backup of all modified files as a fail-safe!).

  1. Find in chat/js/config.js:
        // Defines the sound that is played on error messages:
        soundError: 'sound_6',

Add Below:

        // Defines the sound that is played when private messages are received:
        soundPrivate: 'sound_7',
  1. Find in chat/js/config.js:
        sound_6: 'sound_6.mp3'

Replace with:

        sound_6: 'sound_6.mp3',
        sound_7: 'sound_7.mp3'
  1. Find in chat/js/chat.js:
                default:
                    this.playSound(this.settings['soundReceive']);
                    break;

Replace with:

                default:
                    var messageParts = messageText.split(' ', 1);
                    switch(messageParts[0]) {
                        case '/privmsg':
                            this.playSound(this.settings['soundPrivate']);
                            break;
                        default:
                            this.playSound(this.settings['soundReceive'])
                    }
                    break;
  1. Find in chat/lib/lang/en.php: (and any other languages you may have - you'll need to translate this yourself)
$lang['settingsSoundError'] = 'Sound for error messages:';

Add Below:

$lang['settingsSoundPrivate'] = 'Sound for private messages:';
  1. Find in chat/lib/template/loggedIn.html:
        ajaxChat.fillSoundSelection('soundErrorSetting', ajaxChat.getSetting('soundError'));

Add Below:

        ajaxChat.fillSoundSelection('soundPrivateSetting', ajaxChat.getSetting('soundPrivate'));
  1. Find in chat/lib/template/loggedIn.html:
                    <tr class="rowOdd">
                        <td><label for="soundErrorSetting">[LANG]settingsSoundError[/LANG]</label></td>
                        <td class="setting">
                            <select id="soundErrorSetting" onchange="ajaxChat.setSetting('soundError', this.options[this.selectedIndex].value);"><option value="">-</option></select><input type="image" src="img/pixel.gif" class="button playback" alt="[LANG]playSelectedSound[/LANG]" title="[LANG]playSelectedSound[/LANG]" onclick="ajaxChat.playSound(this.previousSibling.options[this.previousSibling.selectedIndex].value);"/>
                        </td>
                    </tr>

Add Below:

                    <tr class="rowEven">
                        <td><label for="soundPrivateSetting">[LANG]settingsSoundPrivate[/LANG]</label></td>
                        <td class="setting">
                            <select id="soundPrivateSetting" onchange="ajaxChat.setSetting('soundPrivate', this.options[this.selectedIndex].value);"><option value="">-</option></select><input type="image" src="img/pixel.gif" class="button playback" alt="[LANG]playSelectedSound[/LANG]" title="[LANG]playSelectedSound[/LANG]" onclick="ajaxChat.playSound(this.previousSibling.options[this.previousSibling.selectedIndex].value);"/>
                        </td>
                    </tr>

For cosmetic purposes you may want to alternate the "rowEven" and "rowOdd" classes on the remaining table rows that follow from the settings menu.

  1. Upload an MP3 sound file (that you'll supply yourself from somewhere) to chat/sounds/sound_7.mp3

Is this idea worthy of merging with the AJAX Chat release? It is serving a purpose in the instance I've added it to but I can see that it may be a benefit to others too.

PS: I hope this is the correct place to post this, as I'm not asking for help, but providing code samples for this idea.

Remove change name command

Hello,

i've just installed the AJAX Chat to my forum and it is working perfectly.
My question is wherther it is possible to remove the /nick command because all users are abusing this command and are creating confusion.

Thank you

Error on fresh install

I've installed Ajax-Chat and I got this error:

error on line 2 at column 1: Extra content at the end of the document

Handle logged out status with integration versions

The latest version of chat has changed from REQUEST to POST assignment of the loggedout variable in AjaxChat.php (see line 70) in order to avoid potential exploits.

This has introduced a problem with no longer being able to log out with an integration version (at least not the phpbb3 one).

Although the chat session is ended, users are immediately logged in again because they are authenticated on the forum. This wasn't a problem before, when the presence of ?logout=true in the URL ensured that chat always knew a user intended to remain logged out of chat. Now that the URL is ignored, chat won't let anyone stay logged out if they are still authenticated on the forum.

The best solution I can think of:

Handle the presence of a logout in the URL (using GET) and compare that to the session status to decide if a user should be immediately logged in or if they mean to stay logged out of chat while having the chat window open. Possibly hide the password field (since it doesn't do anything in this scenario) and display the username read-only with a button to "enter chat".

Alternatively the chat window could close itself when logout is clicked. I'd have to be sure to end the chat session properly before closing the window. This would fail in too many scenarios though. Like not being able to call .close() and when users are banned.

Logout issue

When posting an image tag of the main script with the ?logout=true GET parameter it will log everyone in the current channel (and when viewing logs) out.

Mute Users

Ability to mute a user. This would function just like a kick/ban without removing them from chat.

phpBB3 Ajax Chat

I installed phpBB3.0 and I was able to install the ajax chat. However when I try to log into the chat it kicks me back out. I know this seems like a cookie issue. Not sure where to start looking. i changed my cookie path in phpBB to localhost/forum/chat but that did not work. I am running xampp as my server.

Creating a channel while user is inside a channel

We can add channels from channels.php
As a feature request, it would be good if I can create a new channel, while chatting inside a channel.
For example when user is inside "Public" channel, he needs to open a new channel named "Surprises". He doesn't have rights to access channels.php, so he can't create a new one.

Default channel must be available

If the default channel is not listed as an available channel, joining the chat results in no chat messages displayed. The default channel should be added to the list of available to stop this from happening.

Registering new users

How can I register new users?
When I check chat.sql I couldn't find a table that includes registered user data.
I only found these tables:
ajax_chat_online;
ajax_chat_online
ajax_chat_messages;
ajax_chat_bans;
ajax_chat_invitations;

Empty chatList when entering a chat room

How to reproduce:
Moderator/admin deletes an user message.
User enters the chat room (the last command in the message queue is /delete).

The problem:
chat.js: handleChatMessages

if (i == (messageNodes.length - 1)) {this.DOMbuffering = false;}

combined with
chat.js: onNewMessage

if(this.parseDeleteMessageCommand(messageText)) {
    return false;
}

forces the addMessageToChatList function exit prematurely.

Solution (?):
Move the DOM updating functionality from the addMessageToChatList function to the handleChatMessages function after the messageNodes loop?

Installation

When I try to install this script I get this error:
Warning: require(/home/aaa/public_html/chat/p2/../global.php) [function.require]: failed to open stream: No such file or directory in /home/aaa/public_html/chat/p2/lib/custom.php on line 16

Fatal error: require() [function.require]: Failed opening required '/home/aaa/public_html/chat/p2/../global.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/aaa/public_html/chat/p2/lib/custom.php on line 16

Then I found this:
http://sourceforge.net/tracker/index.php?func=detail&aid=3528118&group_id=214758&atid=1030954

It says that global.php is a part of myBB. But I don't use it.

I'm planning to use this script standalone.
Is it not possible to use this without any CMS or forum frameworks?

Ban IP range

Chat should be able to ban a range of IPs using a wildcard, like 192.168.1.*

This shouldn't be hard.

GEO Location

hi,

Would it be easy to add geolocation when you click on show user IP as a moderator?
This would save us a lot of time going to whats my IP websites

thanks for your reply in advance

Pat

Channel lists

I have it installed with phpBB and I have created 2 forums. When I go to log into chat at the channel selection I get a line then if I try to select I get the two channels. The problem is if the user does not select a channel and they just log in it goes to a blank channel that just gives allot of bot error messages. Have can I get rid of the blank channel.

Turn off Style choices, Login/Logout button

Hi There, I run Ajax Chat on a Joomla 2.5.7 website that has phpBB3 forum integrated using the JFusion integration software for Joomla to handle dual logins - my Ajax Chat is contained in my phpBB folder and when I login with JFusion login module, I am automatically logged into Joomla and phpBB as well as Ajax Chat, and don't want people to be able to logout from Ajax Chat as it might log them out of the main site. That being said, Ajax Chat is only available to "registered" users.

I have a couple of questions:

  1. How do I disable/remove the login/logout button?
  2. As I want to keep the style format consistent and only allow 1 style, how do I disable/remove the Style drop-down?
  3. How do I set 1 language only and then disable/remove the Language drop-down?

Thanks

Error 503

note: I posted this on Ostio as well but I am doubtful of timely feedback so I'm being more powerful.

Hello, I am using Ajax Chat on phpbb3 - Version 3.0.11

The chat is really cool, Me and my project teammate really like it. But!! We keep getting a recurring Error 503 - in relation to the Database MAX_USER_CONNECTIONS

But I am seriously led to believe that this error has to do with solely ajax chat, because I have 2 different Database-driven applications running, and before I installed ajax chat I never received this error...

It's also hard to believe that we could be driving over the SQL max_connections because there are only 2 people on the board!!!

Any help is very much appreciated. I am subscribed to this topic so I can give a fast reply

HTML5 WebSockets instead of Flash

Using HTML5 WebSockets would allow bidirectional server-communication from mobile devices and modern browsers with no need for Flash.

Direct link to single channel

Hi, I try to figure out a way to create a link to a single channel, so hide the "change channel function"
I cannot find a solution, any suggestions?

User authentication - same password for all

Thank you for great library.

I will use same password for all users, so I will suppress password check mechanism. I will check whether the input password is the same with master password, login user if OK.
Which function should I change? Is it possible to write a function inside "custom.php" or should I change it from the "classes.php" file, if so which function(s) ?

Next-Gen: Node.JS Server, HTML5 WebSockets/Audio, Flash Fallback

Update: I have written a tutorial in the 4th post listing every step required to make this a reality, getting rid of the complex Ruby, and the ancient Flash dependencies all in one go, and making the client/server much easier to code and extend in the future.

Old post:
It's true that the Ruby server works well, but if you are looking for a fun and quick-to-write project, there's Node.JS (http://nodejs.org/) which lets you write an ultra-high-performance server in very few lines of code.

It contains libraries for MySQL which makes implementation easy, and passing messages around between connected sockets is super easy too (there are built-in broadcast methods). Check some videos about it. It's fantastically fun and quick to develop for! I know that you could have a NodeJS based server in less than a day.

The language you use to write servers with it is Javascript, something you are already very familiar with considering that AJAXChat is mostly Javascript/AJAX.

Here's an introduction video from a year ago, with the author himself. He goes through everything including how to make a chat server in Node. http://www.youtube.com/watch?v=jo_B4LTHi3I

The question remains: Why write a NodeJS server?

  1. Ultra-high performance (asynchronous threads)
  2. Very quick and fun to write a chat server in
  3. Exists for every platform and requires only a single .exe/bin file which contains everything (http://nodejs.org/download/)

The third point is especially great, because the Ruby server requires lots of setup for Ruby itself on Mac OS X and Windows (it's easier on Linux).

With NodeJS, they just have to download Node, and run one of:
./node server.js (mac, linux, unix)
node.exe server.js (windows)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.