2016-12-13 14 views
0

我使用Laravel 5.2和我想要的東西是調用從插座斷開事件的自定義功能在我的表playsessions更新記錄調用laravel事件或功能。如何當插座拔掉觸發事件

過程

  1. 當用戶輸入到信道部和我通過AJAX發送的用戶的設備的信息,例如:IP,devide,瀏覽器,插座ID等。 。爲了創建數據庫中的記錄。

  2. 但是,如果用戶斷開連接,我想更新該記錄發送套接字ID。

其實,我做了第一步但我不知道如何做第二步。

視圖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

發出另一個Ajax請求,在用戶斷開連接時將該ID發送到服務器。然後在服務器端進行更新。就像你在用戶連接時一樣。 – simon

+0

我在視圖通道內使用這種方法,但不起作用。您可以看到更新的代碼。 –

+0

如果客戶端斷開連接(可能是由於網絡故障),爲什麼還要依賴Ajax請求?難道你不想在服務器端使用'disconnect'事件來做你想做的事嗎? – darrachequesne

回答

0

你可以用你需要的數據發送一個AJAX請求並從那裏發起事件。

+0

我在視圖通道中使用了這種方法,但不起作用。您可以看到更新的代碼 –