pusher 프레젠스 채널(presence-channel) 사용법


* 공개 채널
- 인증없이 접속 가능
- 생성
var channel = pusher.subscribe('ch1');


* 비공개 채널
- 채널이름 접두사를  'private-' 로 하면 비공개 채널이 된다
- 인증 필요
var privateChannel = pusher.subscribe('private-ch1');



//==============
* 프레젠스 채널 (출석 채널)
https://pusher.com/docs/channels/using_channels/presence-channels
- 채널이름 접두사를  'presence-' 로 하면 비공개 채널이 된다
- 비공개 채널, 인증 필요 https://pusher.com/docs/channels/server_api/authenticating-users
- 100 명 제한, 사용자 정보 1KB 제한
- 채팅 방 만들기 용이하게 기능 제공

var presenceChannel = pusher.subscribe('presence-ch1');


- 사용자 수
var count = presenceChannel.members.count;

- 사용자 별 처리
presenceChannel.members.each(function(member) {
  var userId = member.id;
  var userInfo = member.info;
});

- 사용자 정보 얻기
var user = presenceChannel.members.get('some_user_id');


- 내 정보 얻기
var me = presenceChannel.members.me;


//===========
- 이벤트

- 회원 들어옴 , member_added
channel.bind('pusher:member_added', function(member) {
  // for example:
  add_member(member.id, member.info);
});


- 회원 나감 , member_removed
channel.bind('pusher:member_removed', function(member) {
  // for example:
  remove_member(member.id, member.info);
});



//====================================
* 채널 사용자 인증
https://pusher.com/docs/channels/server_api/authenticating-users


var pusher1 = new Pusher('app_key', {
  authEndpoint: '/broadcasting/auth', // 기본값 = '/pusher/auth'
  authTransport: 'ajax' , // 기본값 = 'ajax' , jsonp도 가능
  auth: {
    headers: {
      'X-CSRF-Token':  `{{ csrf_token() }}`,
    }
  }
});

authTransport: 'ajax' // 기본
- 경우 , socket_id 와  channel_name 이 전송됨


- 클라이언트에서 응답 받기
var channel = pusher1.subscribe('presence-ch100');
channel
.bind('pusher:subscription_succeeded', function() {

})
.bind('pusher:subscription_error', function(status) {
if(status == 408 || status == 503){
    // retry?
}
});




//==============
- 서버측 인증 , 라라벨

- 라라벨 사용시
BroadcastServiceProvider.php 파일에서 
인증경로가  '/broadcasting/auth' 자동 생성됨
인증을 시도하면 routes/channels.php 파일에서 처리

.env 파일
BROADCAST_DRIVER=pusher



//  routes/channels.php

//pusher에서 채널이름을 'presence-ch100' 로 하면 'presence-'접두사를 뺀 'ch100'여기로 인증시도
Broadcast::channel('ch100', function ($user) {
    return '1';
});


- 리턴값 예
{
  "auth":"49e26cb8e9dde3dfc009:a8cf1d3deefbb1bdc6a9d1547640d49d94b4b512320e2597c257a740edd1788f",
  "channel_data":"{\"user_id\":\"Phil Leggetter\",\"user_info\":{\"name\":\"Phil Leggetter\",\"imageUrl\":\"http:..."}}"
}




//================
- 에러
laravel pusher auth 419 Page Expired

- 에러원인 : ajax 통신에 csrf 토큰이 없어서 생기는 에러

- 해결방법 
var pusher = new Pusher( ...
...
auth: {        
            headers: {
                'X-CSRF-Token': `{{ csrf_token() }}`, // <<<== 추가
            }
        },

'Code > Web' 카테고리의 다른 글

[MySql] 중복 방지 작업  (0) 2019.09.09
mysql sql 명령 , 테이블변형 (alter table)  (0) 2019.08.14
[Pusher] pusher 사용법  (0) 2019.08.14
[Pusher 데모] Realtime User Status Update  (0) 2019.08.13
[Web] 리눅스 파일 열기 제한 수정  (0) 2019.08.09
[AWS] RDS , Mysql 접속 방법  (0) 2019.08.07
Posted by 코덴스

댓글을 달아 주세요