向nodejs服务器广播事件

7fyelxc5  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(313)

我有一个laravelrestapi,我想通过redis(或socket.io)广播事件来扩展它。我在macos上做这件事,redis在6379端口上运行,laravel在vagrant上运行,节点服务器在node server.js上运行;但是,调用事件行时,节点控制台中不会显示任何内容。应用程序的工作方式如下:在返回响应之前,将请求发布到一个最后有事件行的路由->通过redis向node广播事件->node接收事件并发送到channel x。
当我想广播我使用的事件时: event(new BordCreated($bord)); 事件:

  1. <?php
  2. namespace App\Events;
  3. use App\Models\Bord;
  4. use Illuminate\Broadcasting\Channel;
  5. use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
  6. use Illuminate\Queue\SerializesModels;
  7. use Illuminate\Broadcasting\PrivateChannel;
  8. use Illuminate\Broadcasting\PresenceChannel;
  9. use Illuminate\Foundation\Events\Dispatchable;
  10. use Illuminate\Broadcasting\InteractsWithSockets;
  11. use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
  12. class BordCreated implements ShouldBroadcast
  13. {
  14. use Dispatchable, InteractsWithSockets, SerializesModels;
  15. public $bord;
  16. /**
  17. * Create a new event instance.
  18. *
  19. * @param Bord $bord
  20. */
  21. public function __construct(Bord $bord)
  22. {
  23. $this->bord = $bord;
  24. }
  25. /**
  26. * Get the channels the event should broadcast on.
  27. *
  28. * @return \Illuminate\Broadcasting\Channel|array
  29. */
  30. public function broadcastOn()
  31. {
  32. return new Channel('action-channel-one');
  33. }
  34. }

环境:

  1. BROADCAST_DRIVER=redis
  2. CACHE_DRIVER=file
  3. SESSION_DRIVER=file
  4. QUEUE_DRIVER=sync
  5. REDIS_HOST=127.0.0.1
  6. REDIS_PASSWORD=null
  7. REDIS_PORT=6379

节点服务器:

  1. var app = require('express')();
  2. var server = require('http').Server(app);
  3. var io = require('socket.io')(server);
  4. const SOCKET_PORT = 9000;
  5. const REDIS = {
  6. "host": "127.0.0.1",
  7. "port": "6379"
  8. }
  9. var ioRedis = require('ioredis');
  10. var redis = new ioRedis(REDIS);
  11. redis.subscribe('action-channel-one', 'action-channel-two');
  12. redis.on('action-channel-one', function (channel, message) {
  13. console.log('test2');
  14. })
  15. redis.on('message', function (channel, message) {
  16. console.log('test');
  17. message = JSON.parse(message);
  18. io.emit(channel + ':' + message.event, message.data);
  19. });
  20. server.listen(SOCKET_PORT, function () {
  21. console.log('Socket server is running.');
  22. });

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题