Membuat Websocket Javascript PHP

Cara membuat websocket dengan Javascript (JS) dan PHP
Requirements:
  1. PHP 5.6+ (minimum) 

Websocket merupakan standard baru untuk berkomunikasi, dan cocok untuk aplikasi chat, live server, live listener. Hampir sama dengan AJAX namun perbedaannya ada pada kecepatan dan CPU usage pada device client maupun server. Intinya lebih ringan lah.
Websocket ini dapat menerima request apapun dan mendistribusikannya secara instant dari perubahan data sebelumnya. Berikut Cara membuat websocket tanpa NODEJS menggunakan Pure Javascript dan PHP:

websocket.js
/** websocket steam */
var socket;
socket_start(); //start websocket

function socket_start() {
  if (!socket) { //if socket is null
    console.log('WebSocket Started'); //start server
    socket = socket_server();
  }
  try {
    socket.onopen = function (msg) {
      //console.log('socket initialized');
    };
    socket.onmessage = function (msg) {
      var data = JSON.parse(msg.data);
      //PARSING RESPONSE DATA
    };
    socket.onclose = function (msg) {
      console.log({ closed: socket });
    };
  }
  catch (ex) {
    console.log(ex);
  }
}

function socket_server() {
  console.log('Socket Initialized');
  // Set YOUR PHP FILE URL
  var host = '/websocket/server.php'; 
  if (!!window.EventSource) {
    var socket = new EventSource(host);
  } else {
    var socket = new WebSocket(host);
  }
  return socket;
}

function socket_stop() {
  if (socket != null) {
    console.log("WebSocket Stopped");
    socket.close();
    socket = null;
  }
}

function socket_check(){
  return socket;
}

Usage:

  1. Checking socket: befungsi untuk mengecek apakah socket sudah berjalan atau tidak.
  2. if (!socket_check()){
      /* Socket tidak berjalan */
    }
    --- OR ---
    if (socket_check() === null){
      /* Socket tidak berjalan */
    }
    --- OR ---
    if (socket_check()){
      /* Socket berjalan */
    }
    
  3. Parsing response data
  4. socket.onmessage = function (msg) { //function socket_start()
       var data = JSON.parse(msg.data);
       //PARSING RESPONSE DATA DISINI
    };
    

server.php
<?php
header('X-Robots-Tag: noindex, nofollow', true);
header('Content-Type: text/event-stream');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Cache-Control: no-cache');

function SEND($id, $msg)
{
  echo "id: $id" . PHP_EOL;
  $data = trim(json_encode([ //encoding JSON untuk data yang panjang
    'array_key' => 'array_value',
  ]));
  echo "data: $data" . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}

$serverTime = time();

SEND($serverTime, 'server time: ' . date('h:i:s', time()));
exit;

Post a Comment

0 Comments