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))
}
相关推荐
FfHUCisI4 小时前
Golang Map 哈希表实现
golang·哈希算法·散列表
驭渊的小故事5 小时前
网络原理04(http协议详细解析3)(2000详细解析HTTPS的工作原理)
网络·网络协议·http
源代码•宸5 小时前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang
IPdodo_6 小时前
2026年爬虫代理 IP 选择指南:从可用率、延迟到成本验收
网络协议·tcp/ip·scrapy·http·https·beautifulsoup·httpx
程序员夏洛6 小时前
HTTP 请求包含哪些内容,请求头和请求体有哪些类型?
网络·网络协议·http
李燚7 小时前
把规则搬回家:三个 BC 的贫血→充血重构实录(第103篇)
golang·agent·ddd·领域驱动设计·eino·deepflux·eino adk
astronautyi9 小时前
Go 运行时内存分配与 GC 位图深度剖析
开发语言·后端·golang
techdashen9 小时前
Go 中如何处理错误
开发语言·后端·golang
美酒没故事°9 小时前
https和tls有什么区别?
网络协议·http·https
FfHUCisI10 小时前
Golang 切片扩容策略
开发语言·数据库·golang