Laravel Websocket 向特定的 Android 设备发送消息

Posted

技术标签:

【中文标题】Laravel Websocket 向特定的 Android 设备发送消息【英文标题】:Laravel Websocket Send Message to Particular Android Devices 【发布时间】:2021-01-23 05:08:06 【问题描述】:

我正在使用 websockets 开发 laravel 应用程序。我已经从the library配置了websockets

构建像 uber 或 ola 这样的实时应用程序。

客户正在创建一个包含起点和终点位置的旅行。

在后台选择最近的司机位置,需要广播行程给最近的司机

创建新行程时广播事件。

事件服务提供者

\App\Events\NewTripHasCreatedEvent::class => [
        \App\Listeners\SendTripCreationNotificationToTheDriverListener::class,
    ],

NewTripHasCreatedEvent

class NewTripHasCreatedEvent

    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $trip;
    public $trip_details;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Trip $trip, $trip_details)
    
        $this->trip = $trip;
        $this->trip_details = $trip_details;
    

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    
        return new PrivateChannel('channel-name');
    

SendTripCreationNotificationToTheDriverListener

public function handle(NewTripHasCreatedEvent $event)

     Find nearest driver
     $km = 0.008997742; //1 km = 0.008997742 degree
    $drivers_distance = 5;
    $query      = Driver::Distance('location', $trip->from_location, $drivers_distance * $km)->take(5)->pluck('user_id');
    //Here send notification to Driver

【问题讨论】:

【参考方案1】:

为了向具有 laravel websockets 的特定客户端发送消息,他们需要自己订阅频道,无法指定要发送到的单个客户端。

我建议为您的后端切换到 node ws,laravel-websockets 不是为此而设计的。 (我遇到了完全相同的问题,在 laravel 中构建服务器并切换到节点的一半,它立即加载更容易)

如果您绝对需要坚持使用 laravel-websockets,那么您可以使用此解决方法

    向所有人广播一条消息,其中包含您要向其发送私人消息的用户 ID 和随机字符串 客户端检查 id 是否与他们的匹配,如果匹配,他们会获取随机字符并订阅频道 服务器将私信广播到只有新订阅用户才能收到的新频道。 客户退订新频道。

如果您确实切换到节点,那么您可以非常轻松地向特定客户端发送消息

【讨论】:

以上是关于Laravel Websocket 向特定的 Android 设备发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何通过spring websocket STOMP向特定订阅发送消息?

如何在 websocket 服务器上向特定用户发送消息

500内部错误Laravel,通过websocket守护进程获取图像

实现websocket 主动消息推送,用laravel+Swoole

使用 Socket IO、Laravel、Redis、Angularjs 向特定用户发送数据

Spring:向 websocket 客户端发送消息