NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。异步通道提供两种方式获取获取操作结果。
- 通过java.util.concurrent.Future类来表示异步操作的结果;
- 在执行异步操作的时候传入一个java.nio.channels。
appendReplacement():sb是一个StringBuffer,replaceContext待替换的字符串,这个方法会把匹配到的内容替换为replaceContext,并且把从上次替换的位置到这次替换位置之间的字符串也拿到,然后,加上这次替换后的结果一起追加到StringBuffer里(假如这次替换是第一次替换,那就是只追加替换后的字符串啦)。
appendTail():sb是一个StringBuffer,这个方法是把最后一次匹配到内容之后的字符串追加到StringBuffer中。
常用 pom.xml
注册中心的实现方式有很多种,实现的方式也有难有易,可以使用zookeeper,consul这些第三方已有的包去帮助实现,这样可以减少开发注册中心的难度,却可能加大运维的难度,当然最最原始的方法就是使用java去实现,不借助其他任何已有的第三方包去搞定,这样做的好处其实并不明显,不过对于开发者而言,使用这种最原始的方式最大的好处就是自己知道所有的实现细节,遇到问题,遇到bug,可以很快的定位到问题所在
RPC 技术出来很多年了,出来的时候我估计还刚刚上大学,在国内,dubbo应该算是先驱者吧,下面的图更是RPC架构经典中的经典
注:我这里只是记了下实际应用,很多细节上的东西没写进来,想学习JFinal的话,可以一边参考JFinal官方文档一边参考我这个,当然,水平有限,只做了一些简单的入门级代码
Channel是一个通道,可以通过它读取和写入数据,它就像自来水管一样,网络数据通过Channel读取和写入。通道与流的不同之处在于通道是双向的,流只是在一个方向上移动(一个流必须是InputStream或者OutputStream的子类),而且通道可以用于读、写或者同事用于读写。因为Channel是全双工的,所以它可以比流更好地映射底层操作系统的API。特别是在UNIX网络编程模型中,底层操作系统的通道都是全双工的,同时支持读写操作。
我们在 Java IO 流的分类介绍 这篇博客中介绍知道:
根据功能分为 节点流 和 包装流(处理流)
节点流:可以从或向一个特定的地方(节点)读写数据,如FileReader。
包装流(处理流):是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
sigh,很遗憾,没有写完整,还有很多想做而没有做的事情,总结一下想做而没有做的事情吧
1)性能测试,没有条件和环境给我做这个事情
2)对portal,对页面的支持,没有一个可以直观的可视页面
3)注册中心对zookeeper的支持
4)监控中心链路调用的追踪的支持,这个很重要,不过没有做