This is a very simple single-room chat client using node.js, socket.io and the express module.

i found that the ready availability of documentation and the eagerness of experienced individuals to help the newly adopting, throughout the node.js communities, allow for quicker learning and sharing of acquired skills

UPDATE: long overdue, but you can now skip the following step and just install via the .msi or .pkg files and they include NPM – http://nodejs.org/#download

to begin, you must install node.js and npm along with their dependencies

cd /pick_a_folder git clone git://github.com/joyent/node.git cd node git checkout v0.4.12 #or latest stable version ./configure make make install #finish nodejs install curl http://npmjs.org/install.sh | sh #install npm

ok! you’ve installed node, npm, and are ready to start coding. to make development much easier, let’s install the express and socket.io modules through the npm. create a directory that you’d like this project to be housed in (e.g. mkdir /home/chat). create a file titled package.json

{ "name": "mukhin_chat", "description": "example chat application with socket.io", "version": "0.0.1", "dependencies": { "express": "2.4.6", "socket.io": "0.8.4" } }

now, install the modules

npm install -d

let’s now create the server file, app.js

var app = require('express').createServer() var io = require('socket.io').listen(app); app.listen(8080); // routing app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); // usernames which are currently connected to the chat var usernames = {}; io.sockets.on('connection', function (socket) { // when the client emits 'sendchat', this listens and executes socket.on('sendchat', function (data) { // we tell the client to execute 'updatechat' with 2 parameters io.sockets.emit('updatechat', socket.username, data); }); // when the client emits 'adduser', this listens and executes socket.on('adduser', function(username){ // we store the username in the socket session for this client socket.username = username; // add the client's username to the global list usernames[username] = username; // echo to client they've connected socket.emit('updatechat', 'SERVER', 'you have connected'); // echo globally (all clients) that a person has connected socket.broadcast.emit('updatechat', 'SERVER', username + ' has connected'); // update the list of users in chat, client-side io.sockets.emit('updateusers', usernames); }); // when the user disconnects.. perform this socket.on('disconnect', function(){ // remove the username from global usernames list delete usernames[socket.username]; // update list of users in chat, client-side io.sockets.emit('updateusers', usernames); // echo globally that this client has left socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected'); }); });

now, let’s create the client file, index.html

<script src="/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <script> var socket = io.connect('http://localhost:8080'); // on connection to server, ask for user's name with an anonymous callback socket.on('connect', function(){ // call the server-side function 'adduser' and send one parameter (value of prompt) socket.emit('adduser', prompt("What's your name?")); }); // listener, whenever the server emits 'updatechat', this updates the chat body socket.on('updatechat', function (username, data) { $('#conversation').append('<b>'+username + ':</b> ' + data + '<br>'); }); // listener, whenever the server emits 'updateusers', this updates the username list socket.on('updateusers', function(data) { $('#users').empty(); $.each(data, function(key, value) { $('#users').append('<div>' + key + '</div>'); }); }); // on load of page $(function(){ // when the client clicks SEND $('#datasend').click( function() { var message = $('#data').val(); $('#data').val(''); // tell server to execute 'sendchat' and send along one parameter socket.emit('sendchat', message); }); // when the client hits ENTER on their keyboard $('#data').keypress(function(e) { if(e.which == 13) { $(this).blur(); $('#datasend').focus().click(); } }); }); </script> <div style="float:left;width:100px;border-right:1px solid black;height:300px;padding:10px;overflow:scroll-y;"> <b>USERS</b> <div id="users"></div> </div> <div style="float:left;width:300px;height:250px;overflow:scroll-y;padding:10px;"> <div id="conversation"></div> <input id="data" style="width:200px;" /> <input type="button" id="datasend" value="send" /> </div>

run the server

node app.js

load up http://localhost:8080 in your browser

GIT repo https://github.com/mmukhin/psitsmike_example_1

UPDATE: i’ve written up a multiroom chat tutorial here