Add graphql-transport-ws subprotocol handler#40
Open
mordhaus wants to merge 2 commits intograph-gophers:masterfrom
Open
Add graphql-transport-ws subprotocol handler#40mordhaus wants to merge 2 commits intograph-gophers:masterfrom
mordhaus wants to merge 2 commits intograph-gophers:masterfrom
Conversation
This pull request refactors how the websocket subprotocol is handled. Previously, the code iterated through the Sec-WebSocket-Protocol header to find a supported protocol. This change removes that manual iteration and relies on the websocket upgrader (e.g., gorilla/websocket) to correctly negotiate and select the subprotocol from the list provided by the client. The handler logic has been moved into a dispatcher, which makes it easier to extend the codebase with support for additional subprotocols in the future, such as the newer graphql-transport-ws protocol (as mentioned in issue graph-gophers#38). Changes: - Removed the manual for loop that iterated over websocket subprotocols. - Delegated subprotocol detection to the websocket upgrader. - Introduced a dispatcher to route connections based on the negotiated subprotocol. - This change is foundational for adding support for the graphql-transport-ws subprotocol.
9c6be08 to
911efd7
Compare
911efd7 to
9474a90
Compare
Introduces the transport package to handle the GraphQL over WebSocket protocol. This abstracts the underlying communication layer from core service logic, decoupling network I/O from business operations. The package manages the connection lifecycle, message serialization, and graceful shutdowns. This improves testability by allowing the transport to be mocked and provides a clear separation of concerns. Changes: - Added a new shared GraphQL subscription interface. - Added Connect function to manage the connection lifecycle. - Implemented readLoop and writeLoop for handling messages. - Added support for GraphQL-WS protocol messages (e..g, subscribe, next, complete). - Implemented operationMap for managing active subscriptions. - Created mock connection and service for comprehensive unit tests.
9474a90 to
7e036e7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Introduces the transport package to handle the GraphQL over
WebSocket protocol. This abstracts the underlying communication layer
from core service logic, decoupling network I/O from business
operations.
The package manages the connection lifecycle, message serialization, and
graceful shutdowns. This improves testability by allowing the transport
to be mocked and provides a clear separation of concerns.
Changes:
next, complete).