Socket到底是什么呢?它的Java实现技术有哪些?

云平台

  思考:socket是什么?

  答:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。通俗的讲,Socket非常类似于电话插座。以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于Socket号。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向Socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭Socket,撤消连接。

  思考:socket和http有啥区别?

  答:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力,是http的基础核心,Json/xml,可以说是车上装载的货物。

  思考:socket连接过程是什么?

  答:分为三个步骤,如下:

  (1)服务器监听:服务器端socket并不定位具体的客户端socket,而是处于等待连接的状态,实时监控网络状态。

  (2)客户端请求:由客户端的socket提出连接请求,客户端的scoket必须首先描述它要连接的服务器的socket,指出服务器端socket的地址ip和端口号port,然后就向服务器端socket提出连接请求。

  (3)连接确认:当服务器端socket监听到或者说接收到客户端socket的连接请求,它就响应客户端socket的请求,建立一个新的线程,把服务器端socket的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端socket继续处于监听状态,继续接收其他客户端socket的连接请求。

  思考:socket实现开源技术有哪些?

  答:1、QuickServer :一个免费的开源Java库,用于快速创建健壮的多线程、多客户端TCP服务器应用程序。使用QuickServer,用户可以只集中处理应用程序的逻辑/协议。

  2、Netty:提供了一组基于事件的API来开发高性能,可管理的TCP/IP服务端或客户端应用程序.对于要求建立高性能的网络应用来说,Netty提供许多基本特性,像readiness selection,线程池,写缓冲DoS的预防,可重用的缓冲等。

  4、Java Sockets:一个Java类库模仿了C++ Sockets library的实现方式并基于SUN的java.nio.*非阻塞网络I/O类。

  5、Apache James:完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。James也是一个邮件应用平台,可以通过Mailet扩充其功能,如Mail2SMS、Mail2Fax等。James提供了比较完善的配置方案,尤其是关于邮件内容存储和用户信息存储。

  6、Raining Sockets:一个非阻塞的sockets框架.开发者可以利用它来构建高性能的可以发送与接收10000 socket连接的应用程序。

  7、Cindy:是基于java nio的,提供一个简单,高效的异步I/O框架,tcp/udp/pipe并易于测试。

   8、HP-Socket :一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的TCP/UDP通信系统,提供C/C++、C#、Delphi、E(易语言)、Java、Python等编程语言接口。HP-Socket对通信层实现完全封装,应用程序不必通信层的任何细节;HP-Socket提供基于事件驱动模型的API接口,能非常简单高效地整合到新旧应用程序中。

  9、Grizzl : 的设计与一般的 nio 框架相比是比较不同的,主要不同点在于读和写都是采用 blocking 方式,并且使用临时 selector;线程模型高度可配置。性能据说比 MINA 还高,但是学习曲线很高。

  10、Xscocket : 是一个轻量级的解决方案,核心思想是屏蔽,简化 nio 方式的的开发,并不需要过多的学习。

标签: 云平台