13 冰思雨

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 8w+

SpringBoot + Netty 实现 Json字符串 的传输(六)

业务核心部分都进行完毕了,就剩下 Netty 组件关系的配置 以及 NettyServer 的定义了。package houlei.net.tcp.cfg;import houlei.net.tcp.codec.GenericPackageClassifierCodec;import houlei.net.tcp.codec.GenericPackageCodec;import houlei.net.tcp.hdr.NettyServerHandler;import io.netty.boo

2020-06-02 14:12:07

SpringBoot + Netty 实现 Json字符串 的传输(五)

编解码和数据包都解决了,下面来关注一下,业务处理方面的功能怎样进行设计。1. 构建 NettyServerHandler 类,完成业务逻辑的处理功能。 A. 我们需要一个自定义的线程池,用来执行业务逻辑的处理代码; B. 我们需要封装一下业务处理环节,服务端的业务处理模式比较简单,基本上采用一个请求对应一个应答的操作,所以,可以提取出统一的调用接口 ServerAction 进行业务处理,之后针对不同的请求设计对应的实现类即可。业务处理环节除了 ServerAction 以外,还需要...

2020-06-02 14:07:03

SpringBoot + Netty 实现 Json字符串 的传输(四)

数据包的class类应该怎样定义? 通过包结构的分析,以及编解码过程的了解,编解码阶段被拆分成了两个阶段: 一个阶段是 JavaBean 与 Json串 的相互转换; 另一个阶段是GenericPackage 与 二进制信息流 的相互转换; 本文所介绍的主要内容是上述的 JavaBean 应该怎样定义,才能更方便的进行使用,同时,也能方便的完成另一个阶段的编解码工作。1. 定义三个枚举类,分别表示数据包的 版本、频道号、命令字。2. 定义一个...

2020-06-02 13:40:18

SpringBoot + Netty 实现 Json字符串 的传输(三)

网络通信从编解码开始,前面的第一篇文章中,介绍过数据包的结构,这篇文章就要介绍一下拆包和组包的过程。1. 包头字段的设计目的 A. 起始分隔符:标明一个数据包的开始部分(里面还隐含了小端模式的信息,这个小端模式可以忽略); B. 协议的版本:当前版本是明文传输的,考虑到后期升级可能要采用密文传输包体,所以,设计了一个版本字段; C. 频道号:这个字段的作用不明显,目前是想将包信息按照业务分类,比如:网络连接,权限认证,聊天信息等; D. 命令字:与频道号联合起来作...

2020-06-02 13:05:39

SpringBoot + Netty 实现 Json字符串 的传输(二)

服务端怎么进行开发?

2020-06-02 11:29:08

SpringBoot + Netty 实现 Json字符串 的传输(一)

怎样把一个Json字符串传输到网络的另一端?1. 确定传输协议: 我们在进行网络编程的时候,首先要确定的就是传输协议,常见的传输协议就是UDP和TCP。 我采用的是TCP,因为,TCP可以保证传输数据的可靠性。2. 应用层协议。 为啥应用层还要定义一次协议呢? 因为,应用层都是面向对象的编程,而传输层面向的是二进制的数据流,所以,我们要定义协议完成数据对象与二进制数据流直接的转换。 当然,通常来说,传输Json串,有两种方案可以实现: A....

2020-06-01 16:53:34

关于Quartz那点事(一)

针对初学者,简单介绍Quartz的五大组件。

2015-03-15 21:25:33

C语言的基本数据类型

刚刚接触C语言的朋友们,首先应该弄清楚的,就是C语言的几个基本的sh

2014-07-29 23:09:18

一个简单的笨重Map,内存中保存一些对象,其他的保存到硬盘。

今天观看论坛,发现有些初学者,总是将大量的数据存入HashMap中

2014-06-26 16:01:06

家用型太阳能发电系统的配置方案

近来对太阳能发电方面的事情比较感兴趣,

2014-06-05 16:26:36

MySQL使用Amoeba主从分离的一点点经验

项目开发完毕,移植到服务器的主从

2014-04-16 11:56:24

可激活的间隔任务执行器

近来做项目,遇到一个很蛋疼的问题。以前早就遇到过,但是由于以前系统有变通的方法解决,也就没再弄这个事情。什么问题呢 ? 就是一般情况下,系统会执行以下有时间间隔的周期性任务(比如,每小时执行一次垃圾数据的清理工作),但是,遇到特殊情况还要临时激活任务,让任务临时执行一下(比如突发性垃圾数据猛增)。对于带有时间间隔的周期性任务,写个执行器应该是一件很容易的事情。开启一个线程,每次执行完任务就

2013-08-07 10:27:49

解决Struts2和Servlet的请求冲突

今日开放项目,遇到老程序员用Servlet开发,新程序员用Struts2开发的情况。开发完成后,需要进行功能集成,但,尝试多次都无法搞定。因为,两者的url-pattern,总是有相互包含的部分,所以,无法正确传递HTTP请求。最后,突发奇想,也许自己写一个Filter放在最前面,对所有请求进行拦截,如果是Servlet的请求,则内部跳转至Servlet;其他的请求让Struts2来处理。

2013-08-06 16:55:49

装饰器模式实现文件IO流的ZIP压缩解压(二)

接着上篇文章,上一篇文章讲的是将一个文本文件的数据输出流,转换成ZIP的压缩输出流。      这篇文章,讲述的是,怎样将上一篇文章中生成的压缩文件,进行解压的。也就是说,读取一个ZIP压缩文件,将里面一个被压缩的文件提取出来。      其实,根据压缩、解压,输入、输出 我们可以写出四个装饰器类,分别完成IO流的输入输出、压缩解压功能。暂时先写两个,后面两个有时间再补。package

2013-04-03 00:40:49

装饰器模式实现文件IO流的ZIP压缩解压(一)

以前项目中需要下载一个数据库导出的SQL文本文件到客户电脑,但是这个文件体积庞大,有一个多G的样子,客户只有200KB的带宽,传输非常慢。      于是,对服务端的下载程序,做了一个简单的调整,使得客户接收到的数据,是已经压缩后的ZIP文件。      下面介绍代码,里面包含测试用例。该代码只支持一个ZIP压缩包中,只有一个被压缩的文件,暂不支持多个文件的情况。因为当时场景不需要。p

2013-04-03 00:23:08

多模式匹配算法-AC算法

模式匹配,一般分为单模式匹配和多模式匹配。当然,一般都用于字符序列的匹配当中。多模式匹配,一般是指在一个较长的字符序列中,有多个模式串要进行匹配。本文展示的是多模式匹配算法中一款较为经典的算法--AC算法。AC 算法的核心思想是构造词典的自动机(可以使用trie树来实现), 其算法复杂度是O(m+k+z), m是文本长度,k是所有pattern长度之和,z是字符串中出现pattern的

2012-07-22 02:24:46

单模式匹配算法-KMP算法

模式匹配,一般分为单模式匹配和多模式匹配。当然,通常都是指在字符序列中的匹配问题。       单模式匹配,对一个较长的字符序列,调用一次算法只匹配一个模式串。    本文展示的是单模式匹配中的经典算法--KMP算法。    KMP算法是一种高效的模式匹配算法,复杂度可以达到O(m+n),而普通模式匹配算法的复杂度为O(m*n)。    在普通匹配算法中子串与模式串都需要回溯,

2012-07-22 01:09:02

自定义主键生成策略

写一篇关于数据库主键生成的文章,大家共同研究一下。首先,确定应用场景。多个程序访问同一个数据库,每个程序生成的主键是不会重复的,那么数据也会相对独立。其次,确定数据类型。数据库的主键,往往都采用数字做主键,但也有采用字符串的。    个人理解,数据库对数字的定位速度要远高于字符串的定位速度,所以,优先选用数字作为主键。再次,确定生成规则。生成规则为了不重复一般都是两种思路,一种是自

2012-07-20 12:33:35

将数字转换成人民币大写的小程序

偶然发现了一个以前写的小程序,发在博客上,共同研究一下。记得是以前一个博客上面的需求,就是将数字转换成人民币大写。不过,代码没有经过优化,估计效率不算高。代码如下:public class RMBReader { static char [] NUMs = new char [] {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; s

2012-02-26 01:43:37

Java的系统调用

Java的系统调用,Java实现Ping命令

2011-05-13 17:22:00

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。