Wire up graphql-transport-ws protocol handler#41
Open
mordhaus wants to merge 3 commits intograph-gophers:masterfrom
Open
Wire up graphql-transport-ws protocol handler#41mordhaus wants to merge 3 commits intograph-gophers:masterfrom
mordhaus wants to merge 3 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.
added 2 commits
November 4, 2025 17:21
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.
Connects the `graphql-transport-ws` subprotocol to the main HTTP handler. The handler now inspects the negotiated subprotocol and routes the connection to the new transport package for processing. This change activates the new protocol without affecting the existing legacy implementation. Changes: - Added a case to the subprotocol switch to route connections to `transport.Connect`. - Implemented `transportOptions` to pass handler settings to the new transport package. - Updated the corresponding test to assert a successful handshake for the new protocol.
f0a2982 to
aeefd0b
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.
Connects the
graphql-transport-wssubprotocol to the main HTTPhandler. The handler now inspects the negotiated subprotocol and routes
the connection to the new transport package for processing.
This change activates the new protocol without affecting the existing
legacy implementation.
Changes:
transport.Connect.transportOptionsto pass handler settings to the newtransport package.
for the new protocol.