访问网络服务-Go对IPC的支持
文章目录
一、socket与IPC
socket(套接字)是网络编程中最核心内容之一。
1.1 IPC(进程间通信)
IPC(Inter-Process Communication):进程间通信。因此,IPC这个概念,主要定义的是多个进程之间,相互通信的方法。
主要的IPC(进程间通信)的方法有:系统信号(signal)、管道(pipe)、套接字(socket)、文件锁(file lock)、消息队列(message queue)、信号灯(semaphone,也称为信号量)等。
现存的操作系统都对IPC(进程间通信)提供了强有力的支持,尤其是socket。
1.2 socket(套接字)
socket(套接字),是一种IPC(进程间通信)方法。
在众多的IPC方法中,socket是最为通用和灵活的一种:
- 利用socket进行通信的进程,可以不局限在同一台计算机上;
- 通信的双方无论存在于世界上的哪个角落,只要能狗通过计算机的网卡端口以及网络进程互联,就可以使用socket;
支持socket的操作系统,会对外提供一套API。跑在它们之上的应用程序会利用这套API,就可以与互联网上的另一台计算机中的其它程序、甚至同一个程序中的其它线程进行通信。
二、Go语言对IPC的支持
Go语言对IPC提供了一定的支持:
- 在Go的os代码包和os/signal代表包中就有针对系统信号的API;
os.Pipe
函数可以创建命名管道,而os/exec
代码包中对另一类管道(匿名管道)提供了支持;- Go语言在net代码包中有对socket支持的程序实体;
2.1 socket 的系统调用
例如,在Linux操作系统中,用于创建socket实例的API,就是由一个名为socket的系统调用代表的。这个系统调用时Linux内核的一部分。
所谓的系统调用,可以理解为特殊的C语言函数。它们是连接应用程序和操作系统内核的桥梁,也是应用程序使用操作系统功能的唯一渠道。
2.2 Go语言的标准库syscall
在Go语言标准库的syscall代码包中,有一个与这个socket系统调用相对应的函数。这两者的函数签名是基本一致的,它们都会接受三个int类型的参数,并会返回一个可以代表文件描述符的结果。
func Socket(domain, typ, proto int) (fd int,