stackrox / go-grpc-http1

A gRPC via HTTP/1 Enabling Library for Go
Apache License 2.0
116 stars 27 forks source link

Support building for WASM #213

Open flimzy opened 3 months ago

flimzy commented 3 months ago

At present, this package fails to build for WASM:

../../../../go/pkg/mod/golang.stackrox.io/grpc-http1@v0.3.13-0.20240812074332-70d8a3e22717/client/ws_proxy.go:235:3: unknown field HTTPHeader in struct literal of type websocket.DialOptions
../../../../go/pkg/mod/golang.stackrox.io/grpc-http1@v0.3.13-0.20240812074332-70d8a3e22717/client/ws_proxy.go:236:3: unknown field HTTPClient in struct literal of type websocket.DialOptions
../../../../go/pkg/mod/golang.stackrox.io/grpc-http1@v0.3.13-0.20240812074332-70d8a3e22717/client/ws_proxy.go:239:3: unknown field CompressionMode in struct literal of type websocket.DialOptions

This is due to the fact that github.com/coder/websocket exposes different DialOptions structs for WASM than for other targets. There is an issue open that would address at least some of this, but it's old and hasn't gotten much attention.

Unless/until github.com/coder/websocket addresses this issue, is it reasonable for go-grpc-http1 to put the DialOptions use behind a build tag, so that it can compile for web assembly?

I'm happy to submit a pull request if it's likely to be accepted.

RTann commented 1 month ago

Hi, thank you for your interest in this library, and apologies for the delay. I'm not very familiar with WASM, honestly, so I'm not familiar with the limitations which are in place when using it.

Looking at the DialOptions for WASM, it looks like it lacks HTTPHeader, HTTPClient, and CompressionMode, which we use. I'm not opposed to controlling the DialOptions behind a build tag, but I'm wondering if it will work correctly without setting those options, especially the headers, which helps identify this as gRPC.

What did you have in mind as replacement DialOptions?

flimzy commented 1 month ago

I think the simplest solution would be just to use the same DialOptions for all build tags, and just document that certain of them are ignored for wasm builds.

vikin91 commented 1 month ago

@flimzy your pull request would be very welcome here. If you find time to submit it, Ross or I can give it a look.

I apologize for our delayed reaction. Your initial message arrived in a vacation season and I am sure that our reaction time will be much better now.