什么是Lighthouse GraphQL订阅最佳实践

时间:2019-10-07 03:22:19

标签: subscription laravel-lighthouse

我试图在2周内找到关于Lighthouse订阅的最佳实践。

但是直到现在我都找不到最佳实践。

这是我的shema.graphql

type Subscription {
    rsvHolidaySub(id: ID): Rsv_holiday  }

type Mutation {
    updateHoliday(id: ID!, holiday_type: Int!): Rsv_holiday @update
        @broadcast(subscription: "rsvHolidaySub") }

type Rsv_holiday {
    id: ID!
    holiday_type: Int!
    start_time: String!
    end_time: String! }

当我查询如下的突变updateHoliday

enter image description here

我希望从@broadcast(subscription: "rsvHolidaySub")

调用RsvHolidaySub resolve函数

所以我可以像这样广播

class RsvHolidaySub extends GraphQLSubscription
{
    public function __construct() {}
    public function authorize(Subscriber $subscriber, Request $request): bool {}
    public function filter(Subscriber $subscriber, $root): bool {}    
    public function encodeTopic(Subscriber $subscriber, string $fieldName): string {}
    public function decodeTopic(string $fieldName, $root): string {}

    public function resolve($root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): Rsv_holiday
    {
        // I wanna call broadcast in here!!!!!!
        broadcast(new SomeEvent);

        return $root;
    }
}

我不知道这是订阅的最佳做法。但是我认为这非常简单和干净。

但是,即使我通过使用Redis + laravel-echo-server或beyondcode / laravel-websockets安装了websocket, 未调用resolve函数。

所以我怀疑这是否可能。

我真的很想知道Lighthouse订阅的最佳实践。请分享您的知识。

1 个答案:

答案 0 :(得分:2)

我触发了我的所有订阅from code

但是我也不使用那些@create or @update指令,而只是使用一种字段,所以我在代码中做了我想做的所有事情,然后即使与其他任何数据一起触发了订阅...也可以正常工作对我来说。

但是我不知道什么是“最佳实践”。