在socket.io中调用laravel事件

有可能调用laravel事件并在socket.io中发送一个variables?

这是我想知道的线路是否可以在发送套接字id的套接字中实现:

socket.emit('App\\Events\\ClosePlaySession', socket.id);

Socket.js

 var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server, {'pingInterval': 2000, 'pingTimeout': 5000}); var Redis = require('ioredis'); var redis = new Redis(); io.set('heartbeat timeout', 10); io.set('heartbeat interval', 4); server.listen(3000); io.on('connection', function (socket) { console.log("new client connected " + socket.id); socket.on('disconnect', function() { socket.emit('App\\Events\\ClosePlaySession', socket.id); // This is possible? console.log('client disconnected'); }); }); 

事件ClosePlaySession.php

 <?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; // Repositories use wtv\Repositories\PlaySessionRepository; class ClosePlaySession extends Event implements ShouldBroadcast { use SerializesModels; /** * Create a new event instance. * * @return void */ public function __construct($socket_id) { $playSessionRepository = new PlaySessionRepository; $playSessionRepository->closeSession($socket_id); } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return ['closePlaySession']; } } 

或者什么是最好的方式来发送套接字ID为了更新数据库中的logging。

谢谢

你可以在我自己的这两个仓库中find你想要做的全function的例子:

https://github.com/bretanac93/socket_io_events_laravel

https://github.com/bretanac93/backend_io_events_laravel

您需要运行Redis服务器并configuration和安装依赖项,以便您可以testing项目,前端位于后端的同一个存储库中,是一个小Vue应用程序,在那里我实时显示人们连接和它使用LoggedIn,LoggedOut和RegisteredEvents,但是你也可以定义你自己的事件,希望为你效劳这个小例子,Bests! ;)

PD:如果你喜欢它,不要忘记明星,并且把答案写出来。

更新了问题

你可以检查这个链接,标记的行,你会发现我在db中修改用户: https : //github.com/bretanac93/backend_io_events_laravel/blob/master/app/Listeners/SuccessfullLogin.php#L30

对此的解释是:你总是有一个被广播的事件,但是你也可以定义一个EventListener,当这个事件被调用的时候,你只需要激发这个Listener,并且一切正常,在这里,login,注册或注销(至less在此项目中),如果发生任何这些操作,请在EventServiceProvider.php上触发自己的侦听器,如下所示: https : //github.com/bretanac93/backend_io_events_laravel/斑点/主/应用程序/提供者/ EventServiceProvider.php#L16

请注意,您只是在您的套接字中使用您的套接字才能与前端进行通信,并且后端负责发送正确的事件(现在正在调用该套接口)(即:在聊天室中,您要reflection当用户上线或下线时,在后端定义两个监听器,一个用于login,另一个用于注销,当其中一个事件发生时,被称为定义为广播的事件,套接字将该信号从后端到前端,但在发送该信号时将更改存储在数据库中,而在前端中,在DOM中更改离线在线之间的消息)。

希望你现在理解好,如果你需要更多的帮助,或者如果你还有什么需要的话,请不要犹豫。 干杯! ;)