编程语言应用

首页 » 常识 » 问答 » 语言学习Go语言之socket编程特
TUhjnbcbe - 2023/3/15 19:13:00
免费视频网站vip账号和密码 http://cgia.cn/news/chuangyi/1592405.html

1socket编程概述

什么是socket编程?socket编程是计算机PC机器上2个程序通过一个双向的通信连接实现数据的交互,这个连接的一端就是一个socket。socket的翻译意思上还有个插座的概念,其实,也可以很形象的比喻为插座插上去了就有通电了(网络通了)。

socket编程其实作为UNIX系统的进程间通信机制,通常称为“套接字”,用来描述IP地址和端口的集合,在unix系统下是一个通信的句柄(文件描述符,因为UNIX下所有都是文件)。

UNIXsocket编程的流程大概如下:

服务端:socket(),bind(),listen(),accept(),read()/write(),close()

服务端:socket(),connect(),read()/write(),close()

2Go语言socket编程库

go语言的基础包中,网络包net包含了很多网络I/O,TCP/IP,UDP,域名解析,Unix域套接字等。

虽然提供的都是直接面对很底层的网络I/O访问,但是主要的TCP通信的接口也是封装得比较简单,好用,包括有:

客户端连接使用的Dial方法

服务端进行监听使用的Listen方法

服务端进行接受链接的Accept方法

封装了连接对象Conn类型

3Go语言socket例子与运行结果

3.1源码例子

客户端:客户端连接上服务端后,等待接收数据(使用ReadAll进行全部读取),然后打印出来。

goclientcode

服务端:服务端在端口进行监听,并等待客户端连接,来一个连接就给这个客户单发送HelloWorld加上当前时间的字符串,然后关闭连接。服务端是个循环。

goservercode

3.2运行结果

客户端

clientrequest

服务端

serverresponse

4Go语言socket实际应用

虽然go的socket编程基础方法基本上实现了整个网络socket通信的原型,并且也有最基础的方法库,但是要想写出符合工作中的实际可用的,高并发,高可用的服务,还是需要结合routine和channel的特性基础上进行一定的服务编程模型设计,如以下服务模型和I/O模型的结合:

I/O多路复用管道通信异步调研线程池(routine池)worker线程

并且在工作中往往结合google的protocolbuffer进行字节序列化之后的结合进行底层的socket通信。

底层的socket通信应用场景往往在这些业务领域:

app和前端的h5要做实时通知机制(websocket)

app的心跳存活检测

客户端对网络流量非常在乎(4G)网络,底层socket通信可以控制协议的精简可靠

1
查看完整版本: 语言学习Go语言之socket编程特