`
whao189
  • 浏览: 123503 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

创建非阻塞的Socket服务器<三>

阅读更多
上两篇文章我简单总结了NIO包中的class也提到了Buffer和Charset 说了他们的用途,
这次我们再来看看NIO中最重要的一个类Channel,之所以说它重要,并不是他自身的用途有多大
而是他的子类!很强大,SelectableChannel ReadableByteChannel WritableByteChannel 都是他的子类,就是因为这些类他很重要!我们来具体来看看(在Channel下不仅仅这几个类)

ReadableByteChannel  WritableByteChannel  可以看出了他们是相对的我这里就解释一个类那么另一个类我们就知道是做什么的了!

ReadableByteChannel 中有一个read 方法

read(ByteBuffer bb)

这个方法就是把数据读入到指定的bb 这个缓冲区中。他还有很多子类但是这里我们不详细讲解了

下面来看看SelectablChannel 他是一种支持阻塞和非阻塞模式的通道。那么我们怎么来设置通道是不是阻塞呢?这个方法就是
configureBlcoking(boolean b)

他另外的重要的方法 就是
register(Selector sel,int options)

那么这个方法的作用是什么呢?怎么解释呢?我是这样理解的不知道理解对不对?

register这个方法就是把通道注册到相对应的Selector对象中并为这个通道添加一个标示以表示能在下次接收到相应的Selector 的时候 能根据我添加的这个 标示 知道要发生什么事情!

看到这里你可能会疑惑到底 通道是怎么处理数据的呢?
是的,任何处理数据的方式都离不开 读和写操作。。但是在SelectableChannel 并没有这两个方法,而在他的子类中(SocketChannel),你可能注意到了 ServerSocketChannel也是他的子类,但是他没有,同样是子类为何一个定义了。。一个没有定义这个read 和write 方法呢?

这是当然的。。。一个父亲有多个儿子,他们的学历不同能力的东西也不同,因为 ServerSocketChannel 里面能够产生SocketChannel 。。所以 他就可以产生这个对象,以至于他也用于了 read 和write 方法。。。
说到这里 你是不是明白些了!

那么我们接下来看看Selector 。。。刚才已经提到了。他给我感觉就是一个监视器,同时关注 ServerSocketChannel 和SocketChannel,因此下一个对象(SelectKey)就产生了,他就是专门表示标示的那个类,这样 我们就能在处理数据的时候根据标示的不同而做出不同的业务逻辑处理了。。


看一下 我自己理解NIO处理的整个过程


[/img]
  • 大小: 63.4 KB
分享到:
评论

相关推荐

    Linux下的Socket编程实例(阻塞和非阻塞)

    阻塞和非阻塞Socket Socket 编程中有两种方式:阻塞(Blocking)和非阻塞(Non-Blocking)。阻塞 Socket 指的是在执行某个操作时,程序将等待该操作完成,而非阻塞 Socket 则可以继续执行其他操作,不会被阻塞。 ...

    Socket通信(TCP)非阻塞模式-select模型

    本资源是关于 Socket 通信的非阻塞模式下的 Select 模型的示例代码,基于 TCP 协议,分为服务器端和客户端。该示例代码展示了如何使用 Select 模型实现非阻塞 Socket 通信。 知识点1:非阻塞模式 非阻塞模式是指在...

    基于多线程的非阻塞 socket 编程

    # 基于多线程的非阻塞Socket编程教程 ## 简介 基于多线程的非阻塞Socket编程是一种高效处理网络通信的技术,结合了多线程编程和非阻塞I/O。它用于构建高性能的网络服务器和客户端,可以同时处理多个连接而不使线程...

    Winsocket入门教程二:非阻塞式服务器和客户端程序TCP.doc

    Winsocket 非阻塞式服务器和客户端程序设计 Winsocket 是 Windows 操作系统中的网络编程接口,提供了各种网络编程功能,包括套接字编程、名称解析、网络信息查询等。Winsocket 的应用非常广泛,几乎所有的网络应用...

    java解读NIOSocket非阻塞模式宣贯.pdf

    这个简单的Hello World示例展示了NIO非阻塞Socket的基本工作原理,但在实际应用中,通常还需要处理更复杂的逻辑,如错误处理、心跳检测、连接管理等。理解并熟练运用Java NIO,可以帮助开发者构建出更加高效和可扩展...

    Linux下Socket连接超时的一种实现方法

    这是因为在连接时,我们不知道服务器是否在线,如果不设置非阻塞状态,可能会导致程序阻塞。 其次,在调用 connect 函数连接对端主机时,如果失败,需要判断当前的 errno 是否为 EINPROGRESS,也就是说是不是连接...

    Java基于Socket文件传输示例:服务器端和客户端

    此外,对于大文件,可能需要使用更高效的分块传输策略,或者使用NIO(非阻塞I/O)来提高性能。 总之,Java的Socket API提供了基本的网络通信能力,通过结合输入输出流,我们可以实现文件的跨网络传输。这个示例展示...

    异步非阻塞套接字Winsock开发网络通信程序开发入门

    服务器端会开启一个监听套接字(ServerSock),设置为异步非阻塞模式,并注册各种网络异步事件,如接受新的连接(OnAccept)、数据接收(OnReceive)、数据发送(OnSend)以及连接断开(OnClose)。当这些事件发生时...

    三步学会Java_Socket编程

    在实际应用中,我们可能需要处理多个并发连接,这时可以使用多线程或者NIO(非阻塞I/O)来提高服务器的并发能力。对于服务器端,可以创建一个线程池,每当有新的连接请求时,创建一个新的线程来处理。对于客户端,...

    lab8-SOCKET编程原理.ppt

    4. 通信方式:包括阻塞和非阻塞两种方式。 5. SOCKET 的位置:在应用层程序中,SOCKET 位于 IP 数据链路层和物理层之间,负责将应用层数据转换为网络数据。 6. 不同操作系统中的 SOCKET:包括 Windows Socket...

    完成端口(IOCP) 服务器源码

    1. 创建服务器socket, 并将socket设置为非阻塞模式 2. bind()绑定IP地此与端口 3. listen() 4. 创建IO完成端口,将socket绑定到IO完成端口上 5. 根据当前机器CPU个数创建工作者线程池 6. 使用AcceptEx()提前创建...

    Linux网络编程-网络基础-socket编程-高并发服务器.pdf

    - 非阻塞I/O:将socket设置为非阻塞模式,避免在等待数据时阻塞其他操作。 - 异步I/O:如AIO,操作系统在数据准备好后通知应用程序,进一步提升并发处理能力。 C/S模式和B/S模式是常见的网络应用程序设计模式: - ...

    阻塞及非阻塞通信

    其中,`ServerSocketChannel`和`SocketChannel`是两个关键的类,分别作为服务器端和客户端的通道,它们都是`SelectableChannel`的子类,这意味着它们支持阻塞和非阻塞两种工作模式。 `ServerSocketChannel`是`...

    IBM socket中文版教程

    这部分可能涉及了一些高级特性,比如非阻塞I/O或异步通信,让读者了解到Socket通信不仅仅是简单的数据交换,还可以根据需求实现更复杂的功能。 **1.4 Java Socket - 一个简单示例** 教程通常会通过一个简单的客户端...

    Linux下socket通信.docx

    此外,为了实现更高效、安全的通信,还可以使用SSL/TLS进行加密,或者使用非阻塞I/O、异步I/O等高级特性。 总的来说,Linux下的Socket通信为开发者提供了灵活、强大的网络通信手段,是构建分布式系统、网络服务等不...

    PHP实现Socket服务器的代码

    如果连接队列为空或Socket设置为非阻塞模式,可能返回`false`。 5. `socket_write`: 向已连接的客户端发送数据。在这个例子中,它用于发送欢迎消息。 6. `socket_read`: 从已连接的Socket读取数据。可以指定最大...

    网络编程Socket的应用

    - 对于非阻塞socket,可以使用`select`或`WSAAsyncSelect`来检查socket是否准备好进行读写或其他操作,避免程序被阻塞。 5. **应用场合** - 阻塞模式适合简单、同步的网络通信,例如服务器单线程处理客户端请求。...

    WINCE下SOCKET编程.pdf

    本文将介绍如何创建一个客户端非阻塞SOCKET异步类,适用于需要进行网络通信的WinCE应用。 首先,了解基本概念。套接字(SOCKET)是网络通信中的接口标识,可以将其比喻为邮局中的信件,通过IP地址和端口号来定位和...

    VB.Net中Socket异步编程的实例

    在VB.Net中,Socket异步编程是用于网络通信的关键技术,尤其在开发高效、非阻塞的服务器应用程序时。这个实例展示了如何使用VB.Net的Socket类来实现一个简单的TCP服务器和客户端。 首先,我们来看一下服务器端的...

    tcp服务器客户端demo

    在程序启动时候创建一个工作模式的代理来区分是否启动服务器以及是阻塞方式还是非阻塞方式 在WorkModeProxy中根据配置决定使用Socket的类型,以及工作模式的类型 支持使用不同的socket,可以通过SocketFactory进行...

Global site tag (gtag.js) - Google Analytics