DOWNLOAD
HERE
Node.js adalah perangkat lunak yang didesain untuk mengembangkan aplikasi berbasis web dan ditulis dalam sintaks bahasa pemrograman JavaScript.
Bila selama ini kita mengenal JavaScript sebagai bahasa pemrograman yang berjalan di sisi client / browser saja, maka Node.js ada untuk melengkapi peran JavaScript sehingga bisa juga berlaku sebagai bahasa pemrograman yang berjalan di sisi server,
Untuk mengeksekusi Javascript sebagai bahasa server diperlukan engine yang cepat dan mempunyai performansi yang bagus. Engine Javascript dari Google bernamaV8-lah yang dipakai oleh Node.js yang juga merupakan engine yang dipakai oleh browser Google Chrome.
Bagaimana Node.js Bekerja?
Berbeda dengan bahasa pemrograman sisi server pada umumnya yang bersifat blocking, Node.js bersifat non-blocking, sebagaimana halnya JavaScript bekerja. Node.js berjalan dengan basis event (event-driven). Maksud dari Blocking secara sederhana adalah, bahwa suatu kode program akan dijalankan hingga selesai, baru kemudian beralih ke kode program selanjutnya.
Misalkan kita memiliki program dengan algoritma berikut:
Terima rekues untuk halaman blog
ambil data blog dari database
tulis html berisi data blog
kirim respon ke klien
REFF:
https://www.codepolitan.com/mengenal-nodejs-5880234fe9ae3
Bila kita menggunakan bahasa pemrograman blocking yang bersifat multi-thread, pada poin kedua saat program mengambil data dari database selama jangka waktu tertentu pada satu thread, maka thread lain yang disiapkan untuk menjalankan poin ketiga (yakni menulis data dari database ke dalam bentuk HTML) tidak akan dijalankan hingga thread untuk poin kedua mengembalikan data. Ini sebenarnya bukan masalah karena CPU menjalankan proses dengan sangat cepat. Hanya saja, Node.js dengan single-threaded-nya melakukan dengan cara yang berbeda.
Node.js, mengalokasikan thread untuk setiap poin, dia hanya akan membuat thread hanya
apabila ada event yang membutuhkan hal tersebut. Contohnya untuk kasus di atas, ketika program mengambil data dari database, program hanya akan membuat thread atau dengan kata lain mulai memproses poin ketiga hanya apabila data dari database sudah diterima, menggunakan
callback.
Selain itu, bila ada proses lain yang tidak tergantung pada data tadi, maka proses tersebut akan dijalankan tanpa harus menunggu pengambilan data selesai.
Setelah install UJI NODEJS:
ketik kode sbb:
server.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Node.Js\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
lalu buka CMD dan arahkan ke path : node server.js
OK NODE JS sudah running
Buka Browser dan ketikkan:
http://127.0.0.1:1337/
C:\xampp\htdocs\NOJS\latihan\nodejs>md latNPM
C:\xampp\htdocs\NOJS\latihan\nodejs>cd latNPM
C:\xampp\htdocs\NOJS\latihan\nodejs\latNPM>
npm install md5-json --save
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN saveError ENOENT: no such file or directory, open 'C:\xampp\htdocs\NOJS\latihan\nodejs\latNPM\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open 'C:\xampp\htdocs\NOJS\latihan\nodejs\latNPM\package.json'
npm WARN latNPM No description
npm WARN latNPM No repository field.
npm WARN latNPM No README data
npm WARN latNPM No license field.
+ md5-json@0.2.0
added 9 packages from 6 contributors and audited 9 packages in 3.464s
found 1 high severity vulnerability
run `npm audit fix` to fix them, or `npm audit` for details
C:\xampp\htdocs\NOJS\latihan\nodejs\latNPM>cd..
C:\xampp\htdocs\NOJS\latihan\nodejs>md latNPMG
C:\xampp\htdocs\NOJS\latihan\nodejs>cd latNPMG
C:\xampp\htdocs\NOJS\latihan\nodejs\latNPMG>
npm install --g npm md5-json --save
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
C:\Users\USER\AppData\Roaming\npm\npm -> C:\Users\USER\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.js
C:\Users\USER\AppData\Roaming\npm\npx -> C:\Users\USER\AppData\Roaming\npm\node_modules\npm\bin\npx-cli.js
+ npm@6.9.0
+ md5-json@0.2.0
added 435 packages from 804 contributors in 25.275s
NPM =install JS secara modular ....keluar dari ALL paket di nodejs
npm install md5-json --save
option --g = agar modul yg diinstall tsb bisa dipakai di banyak aplikasi (GLOBAL)
npm install --g npm mdt-json --save
++++
SOCKET IO
NB Posisi pathLathan bebas ...tiadk harus di htdocs.
Buat folder
latsoketIO:
masuk ke dlamnya dan ketik:
npm install socket.io
C:\xampp\htdocs\NOJS\latihan\nodejs>mkdir latsoketIO
C:\xampp\htdocs\NOJS\latihan\nodejs>cd latsoketIO
C:\xampp\htdocs\NOJS\latihan\nodejs\latsoketIO>
npm install socket.io
npm WARN saveError ENOENT: no such file or directory, open 'C:\xampp\htdocs\NOJS\latihan\nodejs\latsoketIO\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open 'C:\xampp\htdocs\NOJS\latihan\nodejs\latsoketIO\package.json'
npm WARN latsoketIO No description
npm WARN latsoketIO No repository field.
npm WARN latsoketIO No README data
npm WARN latsoketIO No license field.
+ socket.io@2.2.0
added 45 packages from 33 contributors and audited 77 packages in 3.472s
found 0 vulnerabilities
lalu di folder latsoketIO buat kode untuk standby di port tertentu
app.js
/*
* load module http, untuk membuat server
* load module socket.io
* load module fs untuk membaca file
*/
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');
/*
* setting aplikasi di port 8888
*/
app.listen(8888);
/*
* buat fungsi hendler , fungsi ini digunakan untuk konfigurasi server
*/
function handler (req, res) {
/*
* baca file index.html
*/
fs.readFile(__dirname + '/index.html',
function (err, data) {
/*
* tangani jika serever erorr
*/
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
//server myserver
//emit =ke
io.on('connection', function (socket) {
socket.emit('myclient', { pesan: 'Hai saya adalah server myserver...........APP.JS' });
socket.on('myserver', function (data) {
console.log(data);
});
});
dan file
index.html sebagai file yang dijalankan oleh client
<!-- disini kita menggunakan socket.io untuk client di CDN -->
<script src="https://cdn.socket.io/socket.io-1.0.6.js"></script>
<script>
/*
* buka koneksi ke server, karena kita membuat server di port 8888
* maka alamat servernya pun harus sesuai
*/
var socket = io('http://localhost:8888');
/*
* baca channel myclient dari client lalu kirimkan data ke myserver
*/
socket.on('myclient', function (data) {
console.log(data);
socket.emit('myserver', { pesan: 'Hai saya pesan dari myclient untuk myserver' });
});
</script>
cara uji:
jalankan app.js
C:\xampp\htdocs\NOJS\latihan\nodejs\latsoketIO>node app.js
dan pada browser jalankan:
http://localhost:8888/
++++++++++++++++++++++++++
APLIKASI CHAT SOCKET
index.php
<html>
<head>
<style>
body{width:600px;font-family:calibri;}
.error {color:#FF0000;}
.chat-connection-ack{color: #26af26;}
.chat-message {border-bottom-left-radius: 4px;border-bottom-right-radius: 4px;
}
#btnSend {background: #26af26;border: #26af26 1px solid;
border-radius: 4px;color: #FFF;display: block;margin: 15px 0px;padding: 10px 50px;cursor: pointer;
}
#chat-box {background: #fff8f8;border: 1px solid #ffdddd;border-radius: 4px;border-bottom-left-radius:0px;border-bottom-right-radius: 0px;min-height: 300px;padding: 10px;overflow: auto;
}
.chat-box-html{color: #09F;margin: 10px 0px;font-size:0.8em;}
.chat-box-message{color: #09F;padding: 5px 10px; background-color: #fff;border: 1px solid #ffdddd;border-radius:4px;display:inline-block;}
.chat-input{border: 1px solid #ffdddd;border-top: 0px;width: 100%;box-sizing: border-box;padding: 10px 8px;color: #191919;
}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
function showMessage(messageHTML) {
$('#chat-box').append(messageHTML);
}
$(document).ready(function(){
var websocket = new WebSocket("ws://localhost:8091/NOJS/chatio/php-socket.php");
websocket.onopen = function(event) {
showMessage("<div class='chat-connection-ack'>Connection is established!</div>");
// http://localhost/NOJS/chatio/index.php?param1=jokowi¶m2=prabowo&id=6
$.urlParam('param1'); // jokowi
$.urlParam('id'); // 6
$.urlParam('param2'); // prabowo
event.preventDefault();
var messageJSON = {
chat_user: $.urlParam('param1'),
chat_message: $.urlParam('param2')
};
websocket.send(JSON.stringify(messageJSON));
}
websocket.onmessage = function(event) {
var Data = JSON.parse(event.data);
showMessage("<div class='"+Data.message_type+"'>"+Data.message+"</div>");
$('#chat-message').val('');
};
websocket.onerror = function(event){
showMessage("<div class='error'>Problem due to some Error</div>");
};
websocket.onclose = function(event){
showMessage("<div class='chat-connection-ack'>Connection Closed</div>");
};
$('#frmChat').on("submit",function(event){
event.preventDefault();
$('#chat-user').attr("type","hidden");
var messageJSON = {
chat_user: $('#chat-user').val(),
chat_message: $('#chat-message').val()
};
websocket.send(JSON.stringify(messageJSON));
});
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
});
</script>
</head>
<body>
<form name="frmChat" id="frmChat" method="get">
<div id="chat-box"></div>
<input type="text" name="chat-user" id="chat-user" placeholder="Name" class="chat-input" required />
<input type="text" name="chat-message" id="chat-message" placeholder="Message" class="chat-input chat-message" required />
<input type="submit" id="btnSend" name="send-chat-message" value="Send" >
</form>
</body>
</html>
<?php
if(isset($_GET["param1"])){
echo $_GET["param1"];
echo "#".$_GET["param2"];
}
?>
php-socket.php
<?php
define('HOST_NAME',"localhost");
define('PORT',"8091");
$null = NULL;
require_once("class.chathandler.php");
$chatHandler = new ChatHandler();
$socketResource = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socketResource, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socketResource, 0, PORT);
socket_listen($socketResource);
$clientSocketArray = array($socketResource);
while (true) {
$newSocketArray = $clientSocketArray;
socket_select($newSocketArray, $null, $null, 0, 10);
if (in_array($socketResource, $newSocketArray)) {
$newSocket = socket_accept($socketResource);
$clientSocketArray[] = $newSocket;
$header = socket_read($newSocket, 1024);
$chatHandler->doHandshake($header, $newSocket, HOST_NAME, PORT);
socket_getpeername($newSocket, $client_ip_address);
$connectionACK = $chatHandler->newConnectionACK($client_ip_address);
$chatHandler->send($connectionACK);
$newSocketIndex = array_search($socketResource, $newSocketArray);
unset($newSocketArray[$newSocketIndex]);
}
foreach ($newSocketArray as $newSocketArrayResource) {
while(socket_recv($newSocketArrayResource, $socketData, 1024, 0) >= 1){
$socketMessage = $chatHandler->unseal($socketData);
$messageObj = json_decode($socketMessage);
$chat_box_message = $chatHandler->createChatBoxMessage($messageObj->chat_user, $messageObj->chat_message);
$chatHandler->send($chat_box_message);
break 2;
}
$socketData = @socket_read($newSocketArrayResource, 1024, PHP_NORMAL_READ);
if ($socketData === false) {
socket_getpeername($newSocketArrayResource, $client_ip_address);
$connectionACK = $chatHandler->connectionDisconnectACK($client_ip_address);
$chatHandler->send($connectionACK);
$newSocketIndex = array_search($newSocketArrayResource, $clientSocketArray);
unset($clientSocketArray[$newSocketIndex]);
}
}
}
socket_close($socketResource);
class.php
<?php
class ChatHandler {
function send($message) {
global $clientSocketArray;
$messageLength = strlen($message);
foreach($clientSocketArray as $clientSocket)
{
@socket_write($clientSocket,$message,$messageLength);
}
return true;
}
function unseal($socketData) {
$length = ord($socketData[1]) & 127;
if($length == 126) {
$masks = substr($socketData, 4, 4);
$data = substr($socketData, 8);
}
elseif($length == 127) {
$masks = substr($socketData, 10, 4);
$data = substr($socketData, 14);
}
else {
$masks = substr($socketData, 2, 4);
$data = substr($socketData, 6);
}
$socketData = "";
for ($i = 0; $i < strlen($data); ++$i) {
$socketData .= $data[$i] ^ $masks[$i%4];
}
return $socketData;
}
function seal($socketData) {
$b1 = 0x80 | (0x1 & 0x0f);
$length = strlen($socketData);
if($length <= 125)
$header = pack('CC', $b1, $length);
elseif($length > 125 && $length < 65536)
$header = pack('CCn', $b1, 126, $length);
elseif($length >= 65536)
$header = pack('CCNN', $b1, 127, $length);
return $header.$socketData;
}
function doHandshake($received_header,$client_socket_resource, $host_name, $port) {
$headers = array();
$lines = preg_split("/\r\n/", $received_header);
foreach($lines as $line)
{
$line = chop($line);
if(preg_match('/\A(\S+): (.*)\z/', $line, $matches))
{
$headers[$matches[1]] = $matches[2];
}
}
$secKey = $headers['Sec-WebSocket-Key'];
$secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
$buffer = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
"Upgrade: websocket\r\n" .
"Connection: Upgrade\r\n" .
"WebSocket-Origin: $host_name\r\n" .
"WebSocket-Location: ws://$host_name:$port/demo/shout.php\r\n".
"Sec-WebSocket-Accept:$secAccept\r\n\r\n";
socket_write($client_socket_resource,$buffer,strlen($buffer));
}
function newConnectionACK($client_ip_address) {
$message = 'New client ' . $client_ip_address.' joined';
$messageArray = array('message'=>$message,'message_type'=>'chat-connection-ack');
$ACK = $this->seal(json_encode($messageArray));
return $ACK;
}
function connectionDisconnectACK($client_ip_address) {
$message = 'Client ' . $client_ip_address.' activity';
$messageArray = array('message'=>$message,'message_type'=>'chat-connection-ack');
$ACK = $this->seal(json_encode($messageArray));
return $ACK;
}
function createChatBoxMessage($chat_user,$chat_box_message) {
$message = $chat_user . ": <div class='chat-box-message'>" . $chat_box_message . "</div>";
$messageArray = array('message'=>$message,'message_type'=>'chat-box-html');
$chatMessage = $this->seal(json_encode($messageArray));
return $chatMessage;
}
}
?>
+jalankan dahulu :
http://localhost/NOJS/chatio/php-socket.php
+setalah ituj jalankan chatnya:
http://localhost/NOJS/chatio/index.php
+jika ingin kirim data dari alat atau arduino:
http://localhost/NOJS/chatio/index.php?param1=jokowi¶m2=prabowo&id=6
OK