Skip to content

Support streaming(push) #334

@defool

Description

@defool

Draft1: Support streaming api like this: https://grpc.io/docs/languages/go/basics/#server-side-streaming-rpc。

proto.tars:

module ServerTest {
	interface RPCServant {  // RPC API
	    string Echo(string in); 
	};

	stream PushServant { // Stream API
	    string Message(string in);
	};
};

Client:

streamCli := &ServerTest.PushServant{}
comm.StringToProxy("App.ServerTest.PushServantObj", streamCli)

msg1, err := streamCli.RecvMessage() // block if no message
msg2, err = streamCli.RecvMessage() // block if no message
err := streamCli.SendMessage("abc") // block if no message

Server Start:

ServerTest.AddStreamSevant("App.ServerTest.PushServantObj", serverImp)

Server Implement:

type serverImp struct{}

func (s *serverImp) Messsage(ctx context.Context, stream ServerTest.MesssageStream) error {
	for {
		msg, err := stream.RecvMessage() // block if no message
		err = stream.SendMessage("hello") // block if no message
	}
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions