ZBLOG

golang service 4种发布类型

在 Go 语言中,一般可以使用以下四种方式发布 Service:

  1. HTTP Server

HTTP Server 是最常用的发布 Service 的方式之一。Go 语言标准库中提供了 net/http 包,通过该包可以方便地创建 HTTP Server。下面是一个简单的例子:

package main

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

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", hello)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

以上代码创建了一个简单的 HTTP Server,监听本地端口 8080,并且实现了一个 / 路由,当客户端请求该路由时会返回 Hello, World! 字符串。

  1. gRPC Server

gRPC 是 Google 开源的高性能、跨平台、开源的远程过程调用(RPC)框架。gRPC 支持多种语言,其中也包括 Go 语言。

在 Go 语言中,可以使用 google.golang.org/grpc 包来创建和管理 gRPC Server。下面是一个简单的例子:

package main

import (
    "context"
    "log"
    "net"

    "google.golang.org/grpc"
)

type GreeterServer struct{}

func (s *GreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) {
    return &HelloReply{Message: "Hello, " + req.Name + "!"}, nil
}

func main() {
    lis, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }

    s := grpc.NewServer()
    RegisterGreeterServer(s, &GreeterServer{})

    log.Println("starting gRPC server...")
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

以上代码创建了一个简单的 gRPC Server,监听本地端口 8080,并且实现了一个 SayHello 方法,当客户端调用该方法时会返回一个欢迎字符串。

  1. TCP Server

在一些特殊场景下,可能需要使用 TCP 协议来发布 Service。在 Go 语言中,可以使用 net 包来创建和管理 TCP Server。下面是一个简单的例子:

package main

import (
    "bufio"
    "log"
    "net"
)

func handle(conn net.Conn) {
    defer conn.Close()

    scanner := bufio.NewScanner(conn)
    for scanner.Scan() {
        ln := scanner.Text()
        log.Println(ln)
        fmt.Fprintf(conn, "you said: %s\n", ln)
    }
}

func main() {
  	l, err := net.Listen("tcp", ":8080")
  	if err != nil {
  		log.Fatalf("failed to listen: %v", err)
  	}
  	defer l.Close()

  	for {
  		conn, err := l.Accept()
  		if err != nil {
  			log.Printf("failed to accept connection: %v", err)
  			continue
  		}
  		go handle(conn)
  	}
}

以上代码创建了一个简单的 TCP Server,监听本地端口 8080,并且实现了一个 handle 方法,当客户端发送一条消息时会返回一个欢迎字符串。

  1. Unix Domain Socket Server

除了 TCP 和 HTTP 协议外,Go 语言还支持使用 Unix Domain Socket 来发布 Service。在 Go 语言中,可以使用 net 包来创建和管理 Unix Domain Socket Server。下面是一个简单的例子:

package main

import (
    "fmt"
    "log"
    "net"
)

func handle(conn net.Conn) {
    defer conn.Close()

    buf := make([]byte, 1024)
    n, err := conn.Read(buf)
    if err != nil {
        log.Fatalf("failed to read from socket: %v", err)
        return
    }

    fmt.Println(string(buf[:n]))
}

func main() {
  	l, err := net.Listen("unix", "/tmp/mysocket.sock")
  	if err != nil {
  		log.Fatalf("failed to listen: %v", err)
  	}
  	defer l.Close()

  	for {
  		conn, err := l.Accept()
  		if err != nil {
  			log.Printf("failed to accept connection: %v", err)
  			continue
  		}
  		go handle(conn)
  	}
}

以上代码创建了一个简单的 Unix Domain Socket Server,并且实现了一个 handle 方法,当客户端发送一条消息时会将该消息打印到控制台上。

以上四种方式都可以用于发布 Service。需要根据具体需求选择合适的方式。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6857

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?