go网络编程基础

socket

socket原理

Socket 原理

Socket 连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:

  • (1) 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态;
  • (2) 客户端请求:客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;
  • (3) 连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.

TCP 

服务端


//1. 绑定并监听端口
listen ,_ := net.Listen("tcp",":12345")

//2. 等待并且接受客户端连接
conn, _ := listen.Accept()

//3. 和客户端数据交互,如read,write
data := make([]byte, 2048)

n,_ := conn.Read(data)  // n代表数据的长度
fat.Println(data[:n])
conn.Write()

客户端
 

// 连接服务器
addr ,_ := net.ResolveTCPAddr("tcp”,”127.0.0.1:12345”)
conn, _ := net.DialTCP("tcp",addr)
// 和服务器数据交互
conn.Write([]byte(“helloworld”))
conn.Read()

http

http和socket的区别

  • http是协议,在应用层,是建立在TCP之上的一种面向Web联网的一种协议
  • socket是接口(API),是对传输层TCP协议或者UDP协议的封装。    


IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面上)。    
也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。如果想要使传输的数据有意义,则必须使用到应用层协议。应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。    


http 超文本传输协议,HTTP最初的目的是为了提供一种发布和接收HTML页面的方法

http是长连接还是短连接

在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
Connection:keep-alive          


在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。    


HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)    
    

socket 是长连接


Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接,因此要通过轮询高速网络,该节点处于活跃状态。

  • 若双方是 Socket 连接,可以由服务器直接向客户端发送数据。
  • 若双方是 HTTP 连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。

HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

猜你喜欢

转载自blog.csdn.net/zengchen73/article/details/81124464