私はLaravel 5.2を使用しています。ソケットイベントの切断からカスタム関数を呼び出して、テーブル内のレコードを更新します。playsessions
ソケット切断イベントが発生したときにlaravelイベントまたは関数を呼び出す方法
プロセス:
ユーザがチャネル部に入り、私は、例えば、AJAXを介してユーザの機器情報を送信する:等IP、devide、ブラウザ、ソケットIDを、..データベースにレコードを作成するために。
しかし、ユーザーが切断すると、ソケット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');
}
});
});
});
感謝。
ユーザーが切断したときにサーバーにIDを送信する別のAjaxリクエストを作成します。次に、サーバー側で更新を行います。ユーザーが接続するときのようにします。 – simon
ビューチャネル内でこのメソッドを使用しますが、機能しません。あなたはコードが更新されたのを見ることができます。 –
クライアントが切断された場合(おそらくネットワーク障害のため)、なぜAjaxリクエストに頼っていますか?むしろサーバー側で 'disconnect'イベントを使用して、あなたが望むことをすることができませんでしたか? – darrachequesne