转载请注明出处,原文地址:https://blog.csdn.net/lucherr/article/details/88358240
说明:该文章是从本人csdn转发过来
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (一)概述 【附源码】
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (二)Java端简介【附源码】 -后期更新
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (三)Android端简介【附源码】 -后期更新
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (四)C#端简介【附源码】 -后期更新
Netty多语言(Java、Android 、C#、WebSocket)通信实例Demo (五)WebSocket端简介【附源码】 -后期更新
想说的话:
最近刚写完Netty多语言通信实例Demo,趁着周末趁热打铁整理博客记录一下,最主要的是想把源码分享出来给有需要的小伙伴提供参考(开源精神支撑着我,影响着我哈哈),然后顺便介绍下自己的一些体会,以及对源码中本人觉得比较重要的部分、踩过坑的部分进行说明。由于涉及多种语言的开发,想了想还是分几篇博客进行介绍,所以准备写成系列文章,这篇文章不会讲具体的代码细节,估计大家更感兴趣的是源码,所以我会在文章结尾给出源码,工作之余有时间我会继续完善其他文章来对不同语言实现的代码细节进行说明。
感谢开源精神,这个Demo也参考了很多资料和代码,在此表示感谢,希望自己能做出一点小小的贡献。
背景介绍:
之前编写了一个软件,Java Netty作为后台,Android作为客户端,从那时候开始接触Netty,有一年多的时间了,性能没得说,现在有加入Windows、网页客户端的需求;Windows桌面软件只用过Java Swing,界面效果实在不堪入目,经过调研,决定使用C#,界面可以用WPF,通信使用DotNetty,于是开始从0研究C#,对于网页端就决定使用WebSocket了,最后编写了这个Demo来验证可行性。
Demo介绍:
这个Demo使用Java Netty编写Server端,Java、Android、C#、WebSocket编写客户端实现简单通信的例子,支持TCP和WebSocket协议,支持多种语言传输对象来通信,使用了MessagePack进行编解码。
写这个Demo的初衷主要就是做技术验证,但是后来想要把这个例子提供给小组的人学习,而且开源出来,所以设计了一个简单的功能:转发消息,让他看起来更像个正经的Demo
代码中有丰富的注释,相信看起来不会太费劲,在Demo中刻意使用了继承、枚举等特性,增加了复杂度,主要是为了实际项目开发做准备,实际开发的时候传输的都是比较复杂的对象,本例中使用了一个端口来监听TCP和WEBSOCKET协议,在后面文章会进行详细说明。
源码中包含三个文件夹:
1.NettyServer:Java Netty 服务端,客户端,Websocket端源码
2.NettyAndroid:Android Netty客户端源码
3.NettyCSharp:C# DotNetty客户端源码
先运行服务端,然后分别运行客户端建立连接,然后发送消息
Demo中IP和端口号配置:
现在Demo中使用的端口号为"8888",Java、C#、WebSocket中IP使用"127.0.0.1",Android中IP使用"192.168.1.111"
根据实际情况进行修改,项目对应的修改位置为:
1.NettyServer: com/netty/test/RunServer.java //Java Server
com/netty/test/RunClient.java //Java Client
web/index.html //WebSocket Client
2.NettyAndroid:com/netty/android/MainActivity.java //Android Client
3.NettyCSharp:MainWindow.xaml.cs //C# Client
为什么选择Netty:
先说点废话:之前并没有对Netty进行太深入研究,这次买了一本《Netty权威指南第2版》翻了一遍,买之前看到很多不好的评价:不够深入、凑字数、日志占了好几篇等,但是我还是买了,我觉得对于我还是有很大帮助的,不能因为一两个负面问题点否定了整本书,抱着发现别人优点的心态去看待这个世界,去其糟粕,取其精华,哪怕从里面学到一个点买这本书就值了。
那么为什么要用Netty?此处借用书中给出的6个原因:
1.API使用简单,更容易上手,开发门槛低
2.功能强大,预置了多种编解码功能,支持多种主流协议
3.定制能力高,可以通过ChannelHandler对通信框架进行灵活地拓展
4.高性能,与目前多种NIO主流框架相比,Netty综合性能最高
5.高稳定性,解决了JDK NIO的BUG
6.经历了大规模的商业应用考验,质量和可靠性都有很好的验证。
为什么选择MessagePack:
用官方的话说:MessagePack是一种高效的二进制序列化格式,它允许您像JSON一样在多个语言之间交换数据。但是,它更快并且更小。具官方现在的介绍,目前支持五十多种语言,我之所以选择它的主要原因在于跨语言、高效、占用空间小,以前使用Java自己的序列化方案,压缩效率低、占空间,最主要是不能跨语言。
Demo效果展示:
效果演示 Java服务端 Java客户端 Android客户端 C#客户端 WebSocket客户端传送门:
Netty官网:https://netty.io/
Netty源码:https://github.com/netty/netty
DotNetty源码:https://github.com/Azure/DotNetty
MessagePack官网:https://msgpack.org/
MessagePack jar包下载:http://repo1.maven.org/maven2/org/msgpack/msgpack/
Javassist官网:http://www.javassist.org/
Javassist jar包下载:https://github.com/jboss-javassist/javassist/releases
源码地址:
PS:如果发现代码中有写的不对、有更好的实现方法或者文章中有误的地方,还望各位指出,我及时修改
网友评论