Beginners guide to node.js, socket.io and the express framework - First Application

If you haven't installed node.js, socket,io, express and the other helper programs make sure you do that before attempting to run the program below. The installation directions can be found in my previous post. The first app I tried was the simple chat. Two files make up the application: the nodejs file, app.js, and the webpage file, index.html. Place both files into the same directory. (I suggest ~/Documents/nodejs/) Make sure port 8080 is open and available on your server then run

node app.js

This will start the node.js service. If all is ok you will see status messages in the terminal that will update with each socket event. If there is a failure the prompt will be returned to you. Fire up a web browser and navigate to your server's address. (In my case it looks like http://192.168.0.12:8080) After a moment you will receive a java prompt asking for a chat user name. After entering a name you will be placed in the chat and can send a receive messages from anyone else connected. Most likely you will be the only one connected so fire up a second web browser to mimic a second chat connection.

The node.js 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');

});

});
And the webpage 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://23.21.164.48: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>

Next learn how to control real-time interactions with node.js and socket.io

Read More