网络编程
文章平均质量分 66
21秋招拒做分母
这个作者很懒,什么都没留下…
展开
-
为什么Tomcat需要打破双亲委派机制
tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双亲委托。对于JVM来说:因此,按照这个过程可以想到,如果同样在CLASSPATH指定的目录中和自己工作目录中存放相同的class,会优先加载CLASSPATH目录中的文件。1. 不打破双亲委派一样可以保证不同web应用加载不同位置的内容,这是通过每个web.原创 2021-09-26 15:34:21 · 3443 阅读 · 1 评论 -
网络编程06:NIO chat room实现(3)客户端
NIO 模型实现 ChatClientstart:获得客户端channel,设置为非阻塞。打开监听器selector,注册connect事件(服务端接受客户端的请求,会返回并触发客户端的connect)。然后发起连接请求。在whie循环中不断监听,一旦有事件触发,通过selectedKeys得到返回的集合,遍历这些key,一一handle。处理完用clear清空。handles:处理CONNECT事件—连接就绪事件:拿到客户端对应的channel。等连接建立好后,创建新线程(UserInputHa原创 2021-03-09 19:31:42 · 179 阅读 · 0 评论 -
网络编程06:NIO chat room实现(2)服务端
NIO 模型实现 ChatServerChannel 负责传输, Buffer 负责存储。1.与bio相同的地方:端口号、关键字、缓冲区大小。2.不同之处:bio用serversocket,nio用ServerSocketChannel,与之对应需要实现2个byte对象。bio用了线程池复用线程,nio用单线程解决即可,需要加入selector。start过程:打开ServerSocketChannel,设置为非阻塞,把它绑定到监听端口。创建selector,在服务端channel上注册acce原创 2021-03-09 16:51:57 · 130 阅读 · 0 评论 -
网络编程06:NIO chat room实现(1)概述
NIO编程模型1.使用selector来监视各个不同的channel(不同的聊天室的客户)注册一个Accept事件,让selector监视Accept事件,当有一个客户端发送连接请求,我们的服务接受了连接请求的时候,相当于触发了这个Selector上的Accept事件,效果与BIO编程模型上的accept()函数的效果是一样的。之后为新连接的客户端再到selector上注册一个read事件,相当于告诉selector有一个新的客户与我们建立了连接,selector要监视这个客户的socket ch原创 2021-03-08 21:24:24 · 136 阅读 · 0 评论 -
网络编程05:NIO chat room多方法实现本地文件拷贝
多方法实现本地文件拷贝场景:本地进行文件拷贝,介绍4种不同的文件拷贝方式两个传统的文件流方式实现拷贝,两个是用 nio 的方式来实现文件拷贝FileCopyDemo.javainterface FileCopyRunner { // source 文件拷贝到 target 的文件中 void copyFile(File source, File target);}public class FileCopyDemo { private static void close(Cl原创 2021-03-08 20:15:30 · 108 阅读 · 0 评论 -
网络编程04:NIO chat room概述
NIO非阻塞模型首先对比上一章BIO编程模型介绍NIO编程模型,通过对比讲解NIO在编程模型上的优点;然后讲解NIO中核心类;分别利用BIO和NIO实战本地文件拷贝功能并分析性能差异引起的原因,夯实NIO的基本功,为后续的改造聊天室功能做技术铺垫。BIO回顾:阻塞之处:调用accept()后服务端一直等待,直到有一个客户端向他建立连接,并建立连接。accept函数的调用才会返回。InputStream.read(), OutputStream.write(): 一直等待用户输入信息。因此无法在原创 2021-03-08 09:52:27 · 186 阅读 · 0 评论 -
网络编程03:BIO chat room客户端
实现客户端:ChatClient先完成主线程:将消息发送给服务器,接收服务器返回的消息ChatClient.java:public class ChatClient { private String DEFAULT_SERVER_HOST = "127.0.0.1"; private int DEFAULT_SERVER_PORT = 8888; private final String QUIT = "quit"; private Socket socket;原创 2021-03-07 20:25:13 · 114 阅读 · 0 评论 -
网络编程03:BIO chat room服务端
BIO模型jdk1.4 之前对 IO 的支持比较简单,都是使用 BIO,就是 Block IO 的模型来进行编码。上面看到,accept 是阻塞的,那么新来的客户端是怎么处理的?就是新建一个 Handler 的线程去处理,这样就不阻塞了当前的客户端了,所以第二个客户端就可以与服务器端发送消息。acceptor线程就是专门用来接收客户端发起的连接请求。它不是用来处理输入输出的数据流,只是用accept函数接受发来的请求的。chat room的UML建模之时序图多人在线,每个人的发言都被转发给其它在原创 2021-03-06 21:33:47 · 96 阅读 · 0 评论 -
网络编程02:Socket+简单json协议封装
Socket与ServerSocket客户端和服务端的流程,下图是一个概述首先创建sercersocket需要用bind绑定端口。服务器端会一直监听这个端口。然后调用accept函数,是一种阻塞式调用。没有客户端要求建立链接,accept会一直阻塞住当前线程。客户端生成的socket对象connect服务端。一旦服务器accept了客户端的连接,会返回一个socket对象,这个对象就是服务器用来和客户端通信的。使用I/O进行传输。传输完毕用close关闭socket对象。...原创 2021-03-06 11:45:31 · 556 阅读 · 0 评论 -
网络编程01:IO+Socket+阻塞/同步
Java的IO以下reader的类,是叠加在上面的基本reader之上使用。InputStreamReader把字节流转换为字符流,它的子类FileReader很常用。文件是以字节存储的,用它可以转换为可读的字符。IO里的装饰器模式:装饰了一个buffer。SocketSocket是网络通信的端点。文件描述符是一个整数,文件描述符表是一打开文件的索引。在进程层面,每个进程都会维护一个文件描述符表。不同进程的不同文件描述符可能对应不同文件(各个进程进行数据交换的接口)。发送数据:原创 2021-03-05 18:51:19 · 101 阅读 · 0 评论