当前位置:  开发笔记 > 编程语言 > 正文

Netty protobuf和google csharp原型用法

如何解决《Nettyprotobuf和googlecsharp原型用法》经验,为你挑选了1个好方法。

我想与Java服务器应用程序通信C#客户端应用程序.Java使用带有protobuf管道enconder的Ne​​tty框架.

我的Proto文件:import"google/protobuf/csharp_options.proto";

option (google.protobuf.csharp_file_options).namespace = "ChatClient.LoginProtocol";
option (google.protobuf.csharp_file_options).umbrella_classname = "LoginProtocol";

option optimize_for = SPEED;

message Credential {
   required string email = 1;
   required string password = 2;

}

Netty管道编解码器:

p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder());
p.addLast("protobufDecoder", new   ProtobufDecoder(LoginProtos.Credential.getDefaultInstance()));

    p.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender());
    p.addLast("protobufEncoder", new ProtobufEncoder());

那么我该如何向java Server发送消息呢.c#代码:

stream = client.GetStream();
sReader = new StreamReader(stream);
sWriter = new StreamWriter(stream);

Credential.Builder builder = Credential.CreateBuilder();

 builder.SetEmail("xxx@gmail.com").SetPassword("12356");

 sWriter.Write(builder.Build().ToByteArray());

 sWriter.Flush();

感谢您的帮助,对不起我的英语.



1> tmbrggmn..:

这可能已经太晚了,但我感觉很仁慈,所以如果有人有类似的问题:

关于框架

Netty只是帮助您设置服务器(任何类型的服务器,因为Netty是"传输不可知")的一般锅炉板代码,因此您可以实现它以使用TCP/IP,UDP等).有没有到了您必须遵守与服务器通信预先定义的网络协议(也就是使用了Netty运行).什么有效地定义了您的协议​​是您的管道.因此,从客户端的角度来看,无论您使用的是Netty服务器端都无关紧要.

关于你的问题

在您的管道中(假设您的服务器管道),您已经定义了protobuf编码器和解码器.他们要做的是:

服务器 - >客户端:假设服务器发送的是protobuf MessageLite对象,将其解码为字节并通过线路发送这些字节

客户端 - >服务器:假设客户端发送的是一系列可以解码为protobuf对象的字节,并在可能的情况下对其进行解码

因此,如果您使用Java客户端测试服务器并且服务器正常工作,那么您的服务器就已经完成了很多工作.您现在需要做的就是使用一个C#库,它将对象转换为protobuf消息,连接到Java服务器并发送字节.

将C#中的对象转换为protobuf消息应该很简单:使用protobuf项目页面上第三方工具中的一个C#protobuf库来执行此操作.连接到您的服务器,并发送protobuf消息字节是您必须自己实现的.本质上,它不应该比为服务器端点创建套接字,将protobuf消息序列化为字节并通过套接字将这些字节发送到服务器更难.希望这能回答你的问题.

总结一下: Netty是您用来实现服务器的Java框架.Google protobuf是您用来定义消息(或更确切地说是合同)的框架.此时,客户端与服务器通信的唯一前提是客户端发送protobuf消息.Netty与客户无关.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有