Comments (13)
I'll take a crack at this. It'll probably end up on the async branch, which will get merged into master soon (tm).
from tarpc.
To the async branch (tikue/async) I added Client::new(Stream)
, as well as ServeHandle::accept(Stream)
where
enum Stream {
Tcp(TcpStream),
Pipe(PipeWriter, PipeReader),
}
Let me know if you're able to get it working with that. I haven't tested it at all yet.
from tarpc.
Added an example demonstrating the usage of pipes.
from tarpc.
Hey, thanks a lot for the quick reply. This looks good.
One thing I'm unsure about, is how to transform a ChildStdin
into a PipeWriter
.
For instance, the child process would try to connect to the master process in its main.
fn main() {
let client = Client::connect((io::stdin(), io::stdout()));
}
But it might be impossible to do with mio. Looking quickly at the Stdin
/Stdout
structs, it doesn't look like they can be set non-blocking.
from tarpc.
I spent a bit of time trying to figure that out last night too. I think the best thing to do would be to file an issue on either the rust or mio repo. I'm kind of the middle man here unfortunately.
from tarpc.
@sbstp looks like mio added it a couple weeks ago.
from tarpc.
I've searched very briefly, and it doesn't look like there's an easy, cross platform way of configuring stdio to be unblocking. It behaves a lot like file I/O.
We could write a polyfill using background thread to simulate asynchronous I/O, or abandon the entire idea of using stdio.
from tarpc.
@sbstp what about mio's support of it that I just linked?
Edit: ah, it's probably only unix support.
from tarpc.
Looks like I didn't search properly. You can fnctl it like any other file descriptor. That fixes our issues then! Only need a new version of mio.
EDIT: It wouldn't work on Windows because the PipeWriter/PipeReader are only available on unix. It's not a problem for my own uses, but it might be a bother for some.
from tarpc.
@sbstp yeah, I just added #[cfg(unix)]
to tarpc's pipe and unix socket support.
from tarpc.
This feature was lost in the tokio rewrite. I'm not sure how I feel about it now. I do like the simplicity of dealing strictly with TCP, but I realize that there's an opportunity here to be useful to a wider audience. I think I'll continue to leave this issue open, but I don't intend to implement it at this time unless there's significant demand.
from tarpc.
Should tarpc be generic over the transport layer (basically Io
, or the new AsyncRead + AsyncWrite
)? It seems worth considering, though I don't know if the hit to ergonomics is worth it. All clients and servers taking a type parameter seems rough. Maybe it's better to just extend StreamType to support a few more types of streams.
from tarpc.
Obsoleted by #199. tarpc is now transport-agnostic.
from tarpc.
Related Issues (20)
- log spammed with `OpenTelemetry subscriber not installed; making unsampled child context` when used w/o Otel HOT 3
- Clippy Warnings in `tarpc`
- Example code only seems to work if I change the server to use ipv4 HOT 6
- Sending from multiple sources to a memory server
- Server acting as a client to another server HOT 5
- On `poll_flush` timing of RPC client and server HOT 3
- Forward thinking discussion on static async support HOT 2
- Removing the dependency on tokio HOT 3
- No error details when exceeding of LengthDelimitedCodec's max frame length HOT 6
- use qualified paths for all macro generated signatures HOT 1
- Why is it called tarpc? HOT 2
- How to save transport context? HOT 24
- Multi-client requests HOT 2
- Bidirectional RPC HOT 3
- Cross Platform Procedure Call HOT 2
- [FEATURE REQUEST] Stream responses HOT 4
- QUESTION: how to get tcp server features for custom transport? HOT 1
- Consider making tracing optional HOT 8
- Bubble up server side transport errors to the client HOT 5
- Design problem, how to call other structs method ?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tarpc.