golang 创建unix socket http服务端

服务端

go 复制代码
package main

import (
	"fmt"
	"net"
	"net/http"
	"os"
)

func main() {

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("hello"))
	})

	http.HandleFunc("/world", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("world"))
	})
	
	// unix socket地址
	addr := "test.sock"
	
	// 如果文件先存在,必须先移除
	if err := os.Remove(addr); err != nil && err == os.ErrNotExist {
		panic(err)
	}
	
	// 使用uinx网络协议
	l, err := net.Listen("unix", addr)
	if err != nil {
		fmt.Println("net.ListenUnix", err)
		return
	}

	err = http.Serve(l, nil)
	if err != nil {
		fmt.Println("http.Serve", err)
		return
	}
}

客户端调用

go 复制代码
package main

import (
	"context"
	"fmt"
	"io"
	"net"
	"net/http"
)

func main() {

	addr1 := "test.sock"

	// 创建一个基于 Unix 域套接字的 HTTP 客户端
	transport := &http.Transport{
		DialContext: func(ctx context.Context, network string, addr string) (net.Conn, error) {
			return net.Dial("unix", addr1)
		},
	}

	client := &http.Client{Transport: transport}

	// 创建一个 HTTP GET 请求
	// http://unix/world中的unix可以为任何值,建议使用有意义的域名,例如本地服务localhost
	req, err := http.NewRequest("GET", "http://unix/world", nil)
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	// 发送请求并获取响应
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	// 读取响应内容
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response:", err)
		return
	}

	// 打印响应内容
	fmt.Println("Response from server:", string(body))
}
相关推荐
Wang's Blog36 分钟前
Go-Zero项目开发17: IM私聊功能实现与消息存储设计
开发语言·后端·golang
名字还没想好☜2 小时前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
编程序的员3 小时前
使用OpenTelemetry来监控GoLang应用
运维·golang·monitoring·apm·opentelemetry
ttwuai16 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
布朗克16820 小时前
Go 入门到精通-31-编码与序列化
开发语言·qt·golang·编码与序列化
ControlRookie1 天前
第04篇_把 HTTP 放进 PLC:扫描周期、缓冲区、状态机和能力边界
http·codesys·plc通信
microrain1 天前
从硬编码到热插拔:SagooIoT插件架构如何打破物联网平台的扩展瓶颈
物联网·golang·开源·sagooiot
記億揺晃着的那天1 天前
HTTPS 页面内网直连 NAS:解决 Mixed Content 与公网带宽瓶颈
网络协议·http·https·nas
geovindu1 天前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
qq_452396231 天前
第六篇:《并发编程核心:Goroutine 与 Channel》
golang