转载请注明出处,原文地址:https://blog.csdn.net/lucherr/article/details/88358240

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多语言通信实例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

 

源码地址:

CSDN下载 积分不受我的控制

Github地址

PS:如果发现代码中有写的不对、有更好的实现方法或者文章中有误的地方,还望各位指出,我及时修改

更多相关文章

  1. FFmpeg在Android上的移植之第一步
  2. 基于 Android(安卓)NDK 的学习之旅-----目录
  3. Android——4.2.2 源码目录结构分析
  4. Android消息机制(基于源码解析)
  5. 解决 Android(安卓)在Eclipse 开发中 Class Not Found 的问题
  6. 自定义View系列教程02--onMeasure源码详尽分析
  7. android客户端控制树莓派GPIO点亮LED灯
  8. Android中文合集 最终版
  9. 如何使用Android(安卓)SDK开发Android应用?

随机推荐

  1. 从。net调用Magento API,并得到“位于XYZ
  2. 单击动态创建的复选框时,通过AJAX / PHP更
  3. PHP168整站系统山寨版闪亮登场
  4. PHP 源码 —— is_array 函数源码分析
  5. 无法从Ajax POST请求中将带空格的数据导
  6. phpMyAdmin的安装配置
  7. thinkphp5 编辑时 唯一验证 解决办法
  8. 无法从mysql中选择最新的而不是相同的数
  9. curl POST的数据大于1024字节
  10. PHP如何区分继承链中的$ this指针?