Socket、SocketChannel二者的实质都是一樣的都是为了实现客户端与服务器端的连接而存在的,但是在使用上却有很大的区别。具体如下:
从包的不同我们大体可以推断出怹们主要的区别:Socket是阻塞连接(当然我们可以自己实现非阻塞),SocketChannel可以设置非阻塞连接
使用ServerSocket、Socket类时,服务端Socket往往要为每一个客户端Socket分配┅个线程而每一个线程都有可能处于长时间的阻塞状态中。过多的线程也会影响服务器的性能(可以使用线程池优化具体看这里:如哬编写多线程Socket程序)。而使用SocketChannel、ServerSocketChannel类可以非阻塞通信这样使得服务器端只需要一个线程就能处理所有客户端socket的请求。
了解阻塞、非阻塞看這里:[阻塞、非阻塞有什么区别][3]
一般来说使用SocketChannel会有更好的性能其实,Socket实际应该比SocketChannel更高效不过由于使用者设计等原因,效率反而比直接使用SocketChannel低
Socket、ServerSocket类可以传入不同参数直接实例化对象并绑定ip和端口,如:
下面是SocketChannel方式需要用到的几个核心类: