我使用Laravel 5.2和我想要的東西是調用從插座斷開事件的自定義功能在我的表playsessions
更新記錄調用laravel事件或功能。如何當插座拔掉觸發事件
過程:
當用戶輸入到信道部和我通過AJAX發送的用戶的設備的信息,例如:IP,devide,瀏覽器,插座ID等。 。爲了創建數據庫中的記錄。
但是,如果用戶斷開連接,我想更新該記錄發送套接字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');
}
});
});
});
感謝。
發出另一個Ajax請求,在用戶斷開連接時將該ID發送到服務器。然後在服務器端進行更新。就像你在用戶連接時一樣。 – simon
我在視圖通道內使用這種方法,但不起作用。您可以看到更新的代碼。 –
如果客戶端斷開連接(可能是由於網絡故障),爲什麼還要依賴Ajax請求?難道你不想在服務器端使用'disconnect'事件來做你想做的事嗎? – darrachequesne