Tuesday, September 17, 2013

Introduction Node.JS, studi kasus : simple chat aplikasi


hello guys, pada post kali ini saya akan memnbahas tentang Node.JS dan membuat aplikasi chatting menggunakan platform ini :)

Node.js adalah sebuah platform dibangun di Chrome Javascript runtime easily building fast, scalable network applications. Node.js menggunakan model event-driven, non-blocking I/O yang membuatnya ringan dan efisien, cocok untuk real-time aplikasi yang berjalan di perangkat yang didistribusikan. Javascript adalah bahasa berbasis event-driven, dan Node.js menggunakan ini untuk keuntungan menghasilkan server yang scalable. Menggunakan arsitektur yang disebut event-loop. Nah berikut sedikit video persentasi Ryan Dahl : 




Nah langsung aja kita mulai. Pertama -tama tentu saja silahkan download Node.JS di sini http://nodejs.org.. Sebelum mulai kita butuh node package manager(npm) yaitu Socket.IO. Apa itu Socket.IO ? berikut penjelasan singkatnya :
"Socket.IO aims to make realtime apps possible in every browser and mobile device, blurring the differences between the different transport mechanisms. It's care-free realtime 100% in JavaScript." sumber : http://socket.io
Nah sekarang langsung saja install Node.JS dan run, lalu tulis perintah ini : npm install socket.io 


Langkah selanjutnya kita buat script untuk sisi server :
var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')
var usernames={};  
app.listen(9999);

function handler (req, res) {
//console.log(req);
  fs.readFile(__dirname + '/index4.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function(socket){

  console.log("Connection " + socket.id + " accepted.");
   console.log(socket.handshake.foo == true); // writes `true`
  console.log(socket.handshake.address.address); // writes 127.0.0.1
   socket.on('adduser', function(username){
        // store the username in the socket session for this client
        socket.username = username;
        // add the client's username to the global list
        usernames[username] = socket.id;
        // send client to room 1
        console.log(username+' has connected to the server');
  socket.broadcast.emit('updatechat', ' has connected',username);
  });
  // now that we have our connected 'socket' object, we can 
  // define its event handlers
  socket.on('message', function(message){
 // we tell the client to execute 'updatechat' with 2 parameters
 
  io.sockets.emit('updatechat',  message,socket.id);
  
        console.log("Received message: " + message + " - from client " + socket.username);
  });

  socket.on('pmessage',function(message){
  // This works and sends message to all clients
  //io.sockets.emit("updatechat",message,socket.username); 
  console.log(usernames[message] + "  " + socket.id + " to  " + message);
  // THIS DOESNOT
  io.sockets.socket(usernames[message]).emit("updatechat","Ping" + message,socket.username); 

  });
  socket.on('disconnect', function(){
  
  io.sockets.emit('usersleft',  socket.username);
  delete usernames[socket.username];
 //socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected');
    console.log("Connection " + socket.id + " terminated.");
  });
    
}); 
Selanjutnya kita buat untuk script di sisi client-nya :
 

<!doctype html>
<html>
  <head>
    <title>Socket.io Test</title>
    <script src="/json.js"></script> <!-- for ie -->
 <script src="/socket.io/socket.io.js"></script>
 </head>
  <body>
  <script>
    var firstconnect = true;
    var socket;
 function connect() {
      if(firstconnect) {
        socket = io.connect(null);
  socket.on('message', function(data){ message(data); });
  socket.on('connect', function(){
  
    socket.emit('adduser', prompt("What's your name?"));
    status_update("Connected to Server"); 
    });
        socket.on('disconnect', function(){ status_update("Disconnected from Server"); });
        socket.on('reconnect', function(){ status_update("Reconnected to Server"); });
        socket.on('reconnecting', function( nextRetry ){ status_update("Reconnecting in " 
          + nextRetry + " seconds"); });
        socket.on('reconnect_failed', function(){ message("Reconnect Failed"); });
  socket.on('updatechat', function (message,socketid) {
              document.getElementById('rec').innerHTML += "Socketid :" + socketid+" Broadcast says: " + message + " <br>";
    //$('#conversation').append('<b>'+username + ':</b> ' + data + '<br>');
        });
  socket.on('usersleft', function (socketid) {
              document.getElementById('rec').innerHTML += "<b>Socketid :" + socketid+" has been left</b><br>";
     });
     firstconnect = false;
     }
     else {
        socket.socket.reconnect();
  }
    }
 function disconnect() {
      socket.disconnect();
    }
 function message(data) {
 document.getElementById('message').innerHTML = "Server says: " + data;
    }
 function status_update(txt){
      document.getElementById('status').innerHTML = txt;
    }
 function esc(msg){
      return msg.replace(/</g, '&lt;').replace(/>/g, '&gt;');
    }
 function send() {
 socket.emit('message',document.getElementById('andy').value);    
    };        
 function pingID(id)
  { 
  socket.emit('pmessage',document.getElementById('andy2').value);
  }
  </script>
  <h1>Socket.io Test</h1>
    <div><p id="status">Not Connected</p></div>
    <div><p id="message"></p></div>  
    <button id="connect" onClick='connect()'/>Connect</button>
    <button id="disconnect" onClick='disconnect()'>Disconnect</button>
 <input type="text" id="andy" />
    <button id="send" onClick='send()'/>Send Message</button>
 <input type="text" id="andy2" />
 <button id="send" onClick='pingID()'/>pingID Message</button>
 </hr>
  <div><p id="rec"></p></div>  
  </body>
</html>
Untuk langkah terakhir mari kita jalankan script yang di atas. Silahkan ketika node <nama_file_server>



Dan simple aplikasi chatting sudah jadi :

Sumber :
http://psitsmike.com/2011/09/node-js-and-socket-io-chat-tutorial/
Node: Up and Running

No comments:

Post a Comment