当前位置: 首页 > article >正文

golang 创建unix socket http服务端

服务端

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
	}
}

客户端调用

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))
}


http://www.kler.cn/a/228613.html

相关文章:

  • Linux系统之kill命令的基本使用
  • 麦田物语学习笔记:创建TransitionManager控制人物场景切换
  • Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽
  • 【Golang/nacos】nacos配置的增删查改,以及服务注册的golang实例及分析
  • TP4056锂电池充放电芯片教程文章详解·内置驱动电路资源!!!
  • 2024年博客之星年度评选—创作影响力评审入围名单公布
  • 如何使用linux inotifywait inotifywatch对文件增删修改进行监测和实现数据同步
  • 最短编辑距离问题与动态规划----LeetCode 72.编辑距离
  • Linux底层基础知识
  • 回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)
  • Go语言学习踩坑记
  • golang开发window环境搭建
  • 【工具】使用asciidoctor-pdf将adoc文件转换成pdf
  • 回归预测 | Matlab实现OOA-CNN-LSTM-Attention鱼鹰算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)
  • 5G智能卷烟工厂数字孪生可视化平台,推进烟草行业数字化转型
  • 贪心算法篇
  • 属性“xxxx”在类型“ArrayConstructor”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“es2015”或更高版本。
  • PMP资料怎么学?PMP备考经验分享
  • uniapp android和微信小程序实现PDF在线预览
  • Java环境配置
  • redis下载与安装教程(centos下)
  • 外汇天眼:黑平台CCF Markets专坑华人,交钱才能出金!
  • Facebook的数字合作愿景:创新与未来发展
  • kubekey网页版安装k8s集群操作流程
  • 【百度Apollo】自动驾驶规划技术:实现安全高效的智能驾驶
  • C语言常见面试题:C语言中如何进行视频处理编程?