feat(subscriber): support grpc-web and add grpc-web feature#498
feat(subscriber): support grpc-web and add grpc-web feature#498hds merged 17 commits intotokio-rs:mainfrom
grpc-web feature#498Conversation
web featureweb feature
f57ce01 to
545750c
Compare
hds
left a comment
There was a problem hiding this comment.
This is looking great. I've tried to answer your questions and give some feedback.
I'm not sure how feasible it would be, but is there any way we could include a single HTML+JS file which is able to read from the gRPC-web endpoint as part of this example? Or do we need to pull in too many JS dependencies?
I believe using pure HTML and JavaScript might be somewhat challenging due to the requirement of generating protocol files, necessitating a node.js project. However, I'm open to adding a basic node.js example. My plan is to use 'connect' as it greatly simplifies the process of generating protocol files. What are your thoughts on this approach? |
|
That sounds like a good approach, using connect. I'm not very familiar with JS tech these days, I just think that if we're adding support for gRPC-web then it would be nice to have a small example which shows it in use. Thank you! |
web featureweb feature
|
I've updated my PR again.
The reason I made this change is that it seems the point of serve_with is not for supporting passing any server builder with layers, it is just for doing some basic gRPC settings. If I am wrong, please correct me. Thanks! |
web featureweb feature
hds
left a comment
There was a problem hiding this comment.
As discussed, I think this is the right approach, however I believe we should keep the cors layer (and tower-http) out of our public API.
0xPoe
left a comment
There was a problem hiding this comment.
I planned to add a real web client example after we merge this API change first. I think it would help reduce the noise from adding a node app to it.
hds
left a comment
There was a problem hiding this comment.
Everything is looking great! I think we just need a bit more documentation (including some examples / doctests) and this PR will be good to merge.
web featuregrpc-web feature
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
99c4414 to
fa50b4c
Compare
0xPoe
left a comment
There was a problem hiding this comment.
I have a concern about the default port for the grpc-web server. 6669 is a restricted port on chrome. So unless users change it, they won't be able to access it in chrome. So maybe we should change the default port when users enable grpc-web support. But I also worry that this would cause more chaos about the default value. Do you have any suggestions?
I wouldn't dynamically change the default port based on using grpc-web. However, it's probably worth setting the port to some other value in the grpc-web example, perhaps something typical like 8080. And also add a comment stating why a different port is used. That way, at least for people copying from the example, there will be extra information. Perhaps also adding a line to the documentation for |
hds
left a comment
There was a problem hiding this comment.
Looking good, some suggestions based on your comment regarding the default port and also a couple of style suggestions that you could apply directly.
Co-authored-by: Hayden Stainsby <hds@caffeineconcepts.com>
Co-authored-by: Hayden Stainsby <hds@caffeineconcepts.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
I've already set it to 9999 before. It worked well on my different browsers. (chrome/arc/firefox/safari)
Added. Thanks for your suggestion! |
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
| .add_service(instrument_server); | ||
| let serve = router.serve(std::net::SocketAddr::new( | ||
| std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1)), | ||
| // 6669 is a restricted port on Chrome, so we cannot use it. We use a different port instead. |
console-subscriber/src/lib.rs
Outdated
| /// .add_service(instrument_server); | ||
| /// let serve = router.serve(std::net::SocketAddr::new( | ||
| /// std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1)), | ||
| /// // 6669 is a restricted port on Chrome, so we cannot use it. We use a different port instead. |
grpc-web featuregrpc-web feature
|
@hds Before we move forward with this PR, is there anything I need to do? |
hds
left a comment
There was a problem hiding this comment.
Looks good. Thanks for all the time you spent on this PR, it's great!
@hi-rustin Sorry! I thought I merged this already. Done now! Thank you! |
|
Thanks for your review! 💚 💙 💜 💛 ❤️ |
…scriber-v0.3.0 (#557) ## 🤖 New release * `tokio-console`: 0.1.10 -> 0.1.11 * `console-api`: 0.6.0 -> 0.7.0 * `console-subscriber`: 0.2.0 -> 0.3.0 ## `tokio-console` ## tokio-console-v0.1.11 - (2024-06-10) ### Added - Replace target column with kind column in tasks view ([#478](#478)) ([903d9fa](903d9fa)) - Add flags and configurations for warnings ([#493](#493)) ([174883f](174883f)) - Add `--allow` flag ([#513](#513)) ([8da7037](8da7037)) ### Documented - Add note about running on Windows ([#510](#510)) ([a0d20fd](a0d20fd)) ### Fixed - Ignore key release events ([#468](#468)) ([715713a](715713a)) - Accept only `file://`, `http://`, `https://` URI ([#486](#486)) ([031bddd](031bddd)) - Fix column sorting in resources tab ([#491](#491)) ([96c65bd](96c65bd)) - Only trigger lints on async tasks ([#517](#517)) ([4593222](4593222)) - Remove duplicate controls from async ops view ([#519](#519)) ([f28ba4a](f28ba4a)) - Add pretty format for 'last woken' time ([#529](#529)) ([ea11ad8](ea11ad8)) ## `console-api` ## console-api-v0.7.0 - (2024-06-10) ### <a id = "0.7.0-breaking"></a>Breaking Changes - **Bump tonic to 0.11 ([#547](#547 ([ef6816c](https://github.com/tokio-rs/console/commit/ef6816caa0fe84171105b513425506f25d3082af))<br />This is a breaking change for users of `console-api` and `console-subscriber`, as it changes the public `tonic` dependency to a semver-incompatible version. This breaks compatibility with `tonic` 0.10.x. ### Documented - Fix typo in proto ([#472](#472)) ([2dd3559](2dd3559)) ### Updated - [**breaking**](#0.7.0-breaking) Bump tonic to 0.11 ([#547](#547)) ([ef6816c](ef6816c)) ## `console-subscriber` ## console-subscriber-v0.3.0 - (2024-06-10) ### <a id = "0.3.0-breaking"></a>Breaking Changes - **Bump tonic to 0.11 ([#547](#547 ([ef6816c](https://github.com/tokio-rs/console/commit/ef6816caa0fe84171105b513425506f25d3082af))<br />This is a breaking change for users of `console-api` and `console-subscriber`, as it changes the public `tonic` dependency to a semver-incompatible version. This breaks compatibility with `tonic` 0.10.x. ### Added - Replace target column with kind column in tasks view ([#478](#478)) ([903d9fa](903d9fa)) - Reduce retention period to fit in max message size ([#503](#503)) ([bd3dd71](bd3dd71)) - Support grpc-web and add `grpc-web` feature ([#498](#498)) ([4150253](4150253)) ### Documented - Add a grpc-web app example ([#526](#526)) ([4af30f2](4af30f2)) - Fix typo in doc comment ([#543](#543)) ([ff22678](ff22678)) ### Fixed - Don't save poll_ops if no-one is receiving them ([#501](#501)) ([1656c79](1656c79)) - Ignore metadata that is not a span or event ([#554](#554)) ([852a977](852a977)) ### Updated - [**breaking**](#0.3.0-breaking) Bump tonic to 0.11 ([#547](#547)) ([ef6816c](ef6816c))

ref #497.
See more at https://discord.com/channels/500028886025895936/838895414455435335/1180164585236471898
Description
This pull request adds support for
grpc-webtoconsole-subscriber. Once you enable this feature by calling theenable_grpc_webfunction, you can connect the console-subscriber gRPC server using a browser client.Explanation of Changes
grpc-webwhich requires thetonic-webcrate as a dependency.serve_with_grpc_webhas been introduced. It appears to be similar to theserve_withAPI. However, if we were to use the same API withserve_with, it would result in a bound issue. We attempted to combineserve_with_grpc_webandserve_with, but it would create a very complex trait bound for the function. Therefore, we decided to introduce a new API to address this problem.grpc_webto show how to use theinto_partsAPI to customize the CORS layer.