一、Socket总结
1、Socket简介
在计算机通信领域,Socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定。通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

图中可以看到Socket是应用层与TCP/IP协议族通信的中间软件抽象层,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一方便的使用tcp/ip协议的功能。
2、Socket常用方法图解

3、Socket网络通信流程

4、Java中Socket使用举例
在Java中,我们使用Socket有两种,一个是基于TCP的Socket,一个是基于UDP的DatagramSocket,本篇只分析基于TCP的Socket。现在我们来看Socket的使用:
客户端:指明主机端口创建Socket,获取输出流,写入数据。
Socket socket = null;
OutputStream os = null;
try {
socket = new Socket("192.168.1.106",9200);
os = socket.getOutputStream();
os.write("hello server !".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(os != null){
os.close();
}
if(socket != null){
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
服务端:指明绑定的端口,创建ServerSocket,开启端口监听。
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(9200);
} catch (IOException e) {
return;
}
while (isRunning){
try {
Socket client = serverSocket.accept();
handleClient(client);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
这里只是一个简单的示例,当然实际开发中可能需要更多的东西,比如在handleClient(client)处理数据的时候加入线程池去处理,以及client的关闭等,这里只是简单的使用。
二、WebSocket总结
1、WebSocket简介
WebSocket 是 HTML5 一种新的应用层协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯。
在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在此WebSocket 协议中,为我们实现通讯服务带来了两大好处:
a. Header
互相沟通的Header是很小的-大概只有 2 Bytes
b. Server Push
服务器可以主动传送数据给客户端
2、WebSocket作用
WebSocket可以实现网站即时通讯技术,替代轮询
网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力实现即时通讯通常是采用轮询、Comet技术解决。
HTTP协议是非持久化的,单工的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。而最比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。
然而WebSocket全双工通信协议的出现可以弥补这一缺点。在WebSocket中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
3、WebSocket与Socket的区别
Socket其实并不是一个协议,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一方便的使用tcp/ip协议的功能。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
WebSocket则是Html5开始提供的一个典型的应用层协议,可以用来实现网站的即时通讯。
补充:现在大多数的手机即时通讯app基本都是通过XMPP协议来实现的,服务器端比如 Netty + openfire等等。