2016-12-13 3 views
0

私はLaravel 5.2を使用しています。ソケットイベントの切断からカスタム関数を呼び出して、テーブル内のレコードを更新します。playsessionsソケット切断イベントが発生したときにlaravelイベントまたは関数を呼び出す方法

プロセス

  1. ユーザがチャネル部に入り、私は、例えば、AJAXを介してユーザの機器情報を送信する:等IP、devide、ブラウザ、ソケットIDを、..データベースにレコードを作成するために。

  2. しかし、ユーザーが切断すると、ソケットIDを送信しているそのレコードを更新したいと思います。

実際には、手順1を実行しますが、2番目の手順を実行する方法はわかりません。

ビューChannel.blade.php

var socket = io.connect('http://localhost:3000'); 

socket.on('connect', function() { 
    var socket_id = socket.io.engine.id; 

    $.ajax({ 
     type: 'POST', 
     url: "{{ route('play_session.store') }}", 
     data: { 
      ip: "{{ $play_session_data['ip'] }}", 
      device: "{{ $play_session_data['device'] }}", 
      platform: "{{ $play_session_data['platform'] }}", 
      browser: "{{ $play_session_data['browser'] }}", 
      session_id: "{{ $play_session_data['session_id'] }}", 
      user_id: "{{ $play_session_data['user_id'] }}", 
      channel_id: "{{ $play_session_data['channel_id'] }}", 
      socket_id: socket_id 
     }, 
     success: function() { 
      console.log('session created'); 
     } 
    }); 
}); 

Socket.js

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var redis = require('redis'); 

server.listen(3000); 

io.on('connection', function (socket) { 
    console.log("new client connected " + socket.id); 

    socket.on('disconnect', function() { 
     console.log('client disconnected'); 

     // I want to call here a event of laravel or function sending the socket.id to update a record in database 
    }); 
}); 

または何ユーザーがlaravelサーバ内から切断されたときに何かを行うための最善の方法です。

を更新:

私はイベントの切断になりましAJAXを使用していますが、動作しません:

ビューChannel.blade.php

var socket = io.connect('http://localhost:3000'); 

socket.on('connect', function() { 
    var socket_id = socket.io.engine.id; 

    $.ajax({ 
     type: 'POST', 
     url: "{{ route('play_session.store') }}", 
     data: { 
      ip: "{{ $play_session_data['ip'] }}", 
      device: "{{ $play_session_data['device'] }}", 
      platform: "{{ $play_session_data['platform'] }}", 
      browser: "{{ $play_session_data['browser'] }}", 
      session_id: "{{ $play_session_data['session_id'] }}", 
      user_id: "{{ $play_session_data['user_id'] }}", 
      channel_id: "{{ $play_session_data['channel_id'] }}", 
      socket_id: socket_id 
     }, 
     success: function() { 
      console.log('session created'); 
     } 
    }); 

    socket.on('disconnected', function() { 
     $.ajax({ 
      type: 'POST', 
      url: "{{ route('play_session.close') }}", 
      data: { 
       socket_id: socket_id 
      }, 
      success: function() { 
       console.log('session closed'); 
      } 
     }); 
    }); 
}); 

感謝。

+0

ユーザーが切断したときにサーバーにIDを送信する別のAjaxリクエストを作成します。次に、サーバー側で更新を行います。ユーザーが接続するときのようにします。 – simon

+0

ビューチャネル内でこのメソッドを使用しますが、機能しません。あなたはコードが更新されたのを見ることができます。 –

+0

クライアントが切断された場合(おそらくネットワーク障害のため)、なぜAjaxリクエストに頼っていますか?むしろサーバー側で 'disconnect'イベントを使用して、あなたが望むことをすることができませんでしたか? – darrachequesne

答えて

0

必要なデータとともにAJAXリクエストを送信し、そこでイベントを発生させることができます。

+0

私はビューチャネル内でこのメソッドを使用しますが、動作しません。あなたは更新されたコードを見ることができます –

関連する問題