Aplikasi ini dari tutorial di website berikut: http://itsolutionstuff.com/post/laravel-52-chat-message-module-using-socketio-redis-express-and-nodejs-from-from-scratchexample.html. Adapun file kode sumbernya ada di github: https://github.com/savanihd/laravel52-socketio-redis-nodejs. Dan, yang terpenting, saya sudah mencobanya. Dan it works!

Nah, berikut ini yang saya lakukan….

  • Instal Nodejs
sudo apt-get update
sudo apt-get install nodejs
  • Instal NPM
sudo apt-get install npm
  • Instal Redis server
sudo apt-get install redis-server
  • Instal express redis socket.io dengan npm
npm install express redis socket.io --save
  • Buat project laravel. Ini asumsinya kita sudah menginstal composer sebelumnya.
composer create-project laravel/laravel chat-laravel --prefer-dist
  • Buat folder nodejs di root folder, sejajar dengan vendor dkk. Kemudian dalam folder tersebut, buat file `server.js` yang isinya berikut:
var app = require('express')();

var server = require('http').Server(app);

var io = require('socket.io')(server);

var redis = require('redis');

server.listen(8890);

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

  console.log("client connected");

  var redisClient = redis.createClient();
  redisClient.subscribe('message');

  redisClient.on("message", function(channel, data) {
    console.log("mew message add in queue "+ data['message'] + " channel");
    socket.emit(channel, data);
  });

  socket.on('disconnect', function() {
    redisClient.quit();
  });
});
  • Install predis package. Pastikan working directori kita adalah folder chat-laravel yang barusan kita buat tadi.
composer require predis/predis
  • Setelah itu, buka config/app.php, modif bagian ini
'Redis'     => Illuminate\Support\Facades\Redis::class,

Menjadi

'LRedis'    => 'Illuminate\Support\Facades\Redis'
  • Selanjutnya, kita harus setting konfigurasi pada file `.env’. Sesuaikan konfigurasi database, nama host, database, user, dan password.
  • SEtelah itu, jangan lupa lakukan migrasi
php artisan migrate
  • Jalankan perintah artisan
php artisan make:auth
  • Buat kontroller chat
php artisan make:controller ChatController
  • Modifikasi file ChatController tersebut sebagai berikut:
namespace App\Http\Controllers;

use App\Http\Requests;

use App\Http\Controllers\Controller;

use Request;

use LRedis; 

class chatController extends Controller {

    public function __construct()

    {

        $this->middleware('guest');

    }

    public function sendMessage(){

        $redis = LRedis::connection();

        $data = ['message' => Request::input('message'), 'user' => Request::input('user')];

        $redis->publish('message', json_encode($data));

        return response()->json([]);

    }

}

Selanjutnya, modifikasi file `resources/views/home.blade.php` menjadi seperti berikut:


@extends('layouts.app')

@section('content')

//code.jquery.com/jquery-1.11.2.min.js

//code.jquery.com/jquery-migrate-1.2.1.min.js

https://cdn.socket.io/socket.io-1.3.4.js



    #messages{

        border: 1px solid black;

        height: 300px;

        margin-bottom: 8px;

        overflow: scroll;

        padding: 5px;

    }



Chat Message Module
name }}" >
var socket = io.connect('http://localhost:8890'); socket.on('message', function (data) { data = jQuery.parseJSON(data); console.log(data.user); $( "#messages" ).append( ""+data.user+":

"+data.message+"

" ); }); $(".send-msg").click(function(e){ e.preventDefault(); var token = $("input[name='_token']").val(); var user = $("input[name='user']").val(); var msg = $(".msg").val(); if(msg != ''){ $.ajax({ type: "POST", url: '{!! URL::to("sendmessage") !!}', dataType: "json", data: {'_token':token,'message':msg,'user':user}, success:function(data){ console.log(data); $(".msg").val(''); } }); }else{ alert("Please Add Message."); } }) @endsection

Berikutnya, tambahkan pada route-nya baris berikut:

Route::post('sendmessage', 'chatController@sendMessage');
  • Selanjutnya, jalankan server.js pada folder nodejs.
nodejs server.js

atau

node server.js

Saya mengalami error, makanya, proses instal express rediss socket.io saya ulangi. Pastikan working direktory saat itu adalah pada root app, sejajar di posisi composer.json.

npm install express redis socket.io --save

Dan, kini saatnya anda mencoba:

Screenshot from 2016-03-13 08:39:07.png

 

dan ini penampakan nodejs

Screenshot from 2016-03-13 08:40:52.png

 

 

 

Advertisements