Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Getting Started with Socket.IO and Node.js

DZone's Guide to

Getting Started with Socket.IO and Node.js

· Performance Zone
Free Resource

Discover 50 of the latest mobile performance statistics with the Ultimate Guide to Digital Experience Monitoring, brought to you in partnership with Catchpoint.

Node.js is not the cure for everything, however, it can certainly makes working with Websockets very easy when using the Socket.io library. Using websockets you can easily build realtime applications and even multi-player games. Today I’ll show you how to easily build a simple chat program using Node.js and Socket.io.

Note: To go through this article you will need to have Node.js installed and working correctly. You will also need some sort of text editor, I’ll be using WebStorm but anything you wish to use should work. Some of the code in this article has been modified from this excellent source: http://book.mixu.net/ch13.html

On you computer create a new folder somewhere convenient called: chat. Inside that folder you can add two files called: app.js and index.html

Let’s fill in the app.js file first.

var fs = require('fs')
    , http = require('http')
    , socketio = require('socket.io');

var server = http.createServer(function(req, res) {
    res.writeHead(200, { 'Content-type': 'text/html'});
    res.end(fs.readFileSync(__dirname + '/index.html'));
}).listen(8080, function() {
    console.log('Listening at: http://localhost:8080');
});

socketio.listen(server).on('connection', function (socket) {
    socket.on('message', function (msg) {
        console.log('Message Received: ', msg);
        socket.broadcast.emit('message', msg);
    });
});

The above code is pretty bare minimum for a chat server. The server sends the index.html file and listens for any incoming websockets. If you were to send a message like “hi” the format would look something like the following:

{"name":"message","args":["hi"]}

The index.html page is also very minimal and looks like the following:

<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        $(function(){
            var iosocket = io.connect();

            iosocket.on('connect', function () {
                $('#incomingChatMessages').append($('<li>Connected</li>'));

                iosocket.on('message', function(message) {
                    $('#incomingChatMessages').append($('<li></li>').text(message));
                });
                iosocket.on('disconnect', function() {
                    $('#incomingChatMessages').append('<li>Disconnected</li>');
                });
            });

            $('#outgoingChatMessage').keypress(function(event) {
                if(event.which == 13) {
                    event.preventDefault();
                    iosocket.send($('#outgoingChatMessage').val());
                    $('#incomingChatMessages').append($('<li></li>').text($('#outgoingChatMessage').val()));
                    $('#outgoingChatMessage').val('');
                }
            });
        });
    </script>
</head>
<body>
Incoming Chat: <ul id="incomingChatMessages"></ul>
<br />
<input type="text" id="outgoingChatMessage">
</body>
</html>

The webpage is not very attractive but it works. Open two browsers preferably ones that support WebSockets (Chrome or Safari will work).

The next step is to install socket.io by doing the following in a terminal (or command prompt):

$ npm install socket.io

Run the app.js file:

$ node app.js

Now with your two browsers go to the following path and try it out: http://localhost:8080/

 

 

 

 

 

Is your APM strategy broken? This ebook explores the latest in Gartner research to help you learn how to close the end-user experience gap in APM, brought to you in partnership with Catchpoint.

Topics:
java ,javascript ,socket.io ,node.js ,performance

Published at DZone with permission of Chad Lung, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}