laravel5.3에서 websocket 통신 자습서 (Pusher)

laravel5.4가 출시되었지만 5.3 기사입니다.

이런 느낌





Pusher란?



Pusher는 웹 서버에서 RESTful API를 전송하여
클라이언트와 websocket 통신을 해주는 멋진 서비스입니다.

Pusher 등록



먼저, 여기로 로그인하십시오.



GitHub 계정으로 로그인할 수 있습니다.



앱 이름은 자유롭게 부디
3은 JS, 4는 이번에는 Laravel을 선택합니다.

만든 후 app keys를 기록해 둡니다.

Laravel 측



config



먼저 config/app.php의 175행 근처에
App\Providers\BroadcastServiceProvider::class,

의 코멘트를 제거

.env



.env 변경

BROADCAST_DRIVER pusher

여기에서 pusher의 app keys 값을 써 갑니다.

PUSHER_KEY에 key
PUSHER_SECRET에 secret
PUSHER_APP_ID에 app_id

각각 작성

Pusher 사용



pusher를 사용하기 위해
composer require pusher/pusher-php-server

실행

또한 브로드캐스트 이벤트를 위해 이벤트 클래스를 만듭니다.
php artisan make:event PusherEvent

app/Events/아래에 만들어집니다
<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class PusherEvent
{
    use InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

이것을

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

use Illuminate\Console\Scheduling\Event;

class PusherEvent extends Event implements ShouldBroadcast
{
    use InteractsWithSockets, SerializesModels;

    public $message;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return ['my-channel'];
    }
}

로 변경

js 측에 보내고 싶은 정보를 public 변수에 건네주면 브로드 캐스트됩니다

route.php
Route::get('/', function() {
    return view('pusher');
});

Route::get('/pusher', function() {
    event(new App\Events\PusherEvent('こんにちわ!'));
});

로 변경

JS측



pusher.blade.php 만들기
<!DOCTYPE html>
<html>
<head>
    <title>Pusher</title>
</head>
<body>
<input type="button" value="push" onclick='push()'>
<ul id="messages"></ul>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://js.pusher.com/3.1/pusher.min.js"></script>
<script>
    //Pusherキー
    var pusher = new Pusher( '{{ env('PUSHER_KEY') }}' , {
        encrypted: true
    });

    //LaravelのEventクラスで設定したチャンネル名
    var channel = pusher.subscribe('my-channel');

    //Laravelのクラス
    channel.bind('App\\Events\\PusherEvent', addMessage);

    function addMessage(data) {
        $('#messages').prepend(data.message);
    }

    function push(){
        $.get('/pusher');
    }
</script>
</body>
</html>

push 버튼을 누르면 '안녕하세요! '이 추가됩니다!

질문 등 있으면 부디!

좋은 웹페이지 즐겨찾기