如何解决Laravel Websocket 向特定 Android 设备发送消息
我正在使用 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
}
解决方法
为了使用 laravel websockets 向特定客户端发送消息,他们需要自己订阅频道,无法指定要发送到的单个客户端。
我建议您的后端切换到节点 ws,laravel-websockets 不是为此而设计的。 (我遇到了完全相同的问题,在 Laravel 中构建服务器并切换到节点的一半,立即加载更容易)
如果你绝对需要坚持使用 laravel-websockets 那么你可以使用这个解决方法
- 向所有人广播一条消息,其中包含要向其发送私人消息的用户 ID 和随机字符字符串
- 客户端检查 ID 是否与他们的 ID 匹配,如果匹配,则获取随机字符并订阅频道
- 服务器将私信广播到新频道,只有新订阅的用户才能收到。
- 客户退订新频道。
如果您确实切换到节点,那么您可以非常轻松地向特定客户端发送消息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。