-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Description
After reading through the codebase, my understanding of the subscription implementation is as follow :
- initial call
subscribe()when a subscription operation hits the server, subscribe()returns anAsyncIterator- This
AsyncIteratorcontains a stream of results of subsequent calls toexecute()
Again, if my understanding is correct, contextValue is passed to subscribe on the initial subscription operation and then passed down to execute whenever an event triggers a reexecution.
In short, contextValue is set once a subscription operation happens and will remain the same until the client unsubscribes.
A common graphql-js implementation is to use DataLoader as a batching/caching library. For queries and mutations, a set of fresh dataloader instances is usually bound to contextValue on a per request basis. When the query/mutation is done, those DataLoader instances are left for garbage collection.
Now, subscription context has a much longer life span, making DataLoader caching behaviour unwarranted in most cases.
Ideally, I guess providing a way to set contextValue per execute() call would allow a behaviour that matches what one could except when setting contextValue on a per request basis for queries and mutations.
Is there any way to do so in current implementation ? Is this a behaviour that could be implemented in graphql-js or should I settle for one context per subscription operation and work my way around that ?