概述
阻塞模式下的 Socket 编程往往是非常低效的,然而 Java 中的典型 Socket 编程核心采用的正是这种模式。好在 Java 提供了另一种解决方案,通过 Socket Channel 技术实现了非阻塞的异步 Socket 编程。本文将以一个简单的同步 Socket Demo 切入,引出并介绍 Java 中的 Socket Channel 并完成一个 Asynchronous Socket 案例。
友情提示:本文还没有写完,明天再说吧(我太难了5555)
一、Socket
在今天的软需分析课上,老师向我们展示了一段用 Java 编写的简单 Socket 通信例程,实现的是基础的 C/S 双向通信。我曾使用 Python 和其它语言开发过 Socket 项目,但为了熟悉 Java 便拿着老师给的代码照着码了一遍:
1 | // Server |
1 | // Client |
然而运行结果不尽人意。C/S 之间确实可以相互收发,但彼此间的通信总是被“随机地” “延迟” 送达。课后重新调试时才发现,Java (Server)Socket 类中的 I/O 及 Client 连接均是阻塞的 Synchronous 实现。阻塞模式下的 Socket 编程往往是非常低效的,然而 Java 中的典型 Socket 编程核心采用的正是这种模式。
二、Socket Channel
三、Asynchronous Socket Channel
四、构建一个简易的异步 Socket 演示
五、参考文章与推荐阅读
[1] Java Socket Server Examples (TCP/IP)
[2] Understanding Asynchronous Socket Channels in Java
[3] Java Network Tutorial - Java Asynchronous Socket Channels