golangはunixドメイン通信のechoテストプログラムを採用する
1360 ワード
golangはunixドメインを通じて他のプロセスとプロセス間の通信を完了することができ、エコーテストdemoは以下のようにします.
コアapiはListenUnixgram,ReadFromUnix,WriteToUnixである.従来のUDPのapiと同様に、プロセス間通信に適用する、UDPのように柔軟な設計インタフェースであり、接続されていない、同時にclientとserverの2つのアドレスが必要であり、データの受信が容易である.
「/tmp/unix_gram_sock 2」の内部socketにより、unixドメイン内の通信であるため、パケット損失の問題を考慮することなく、他のプロセスと効率的に通信することができる.UDP通信であるため、パックとハーフパックの問題は考慮する必要がない.
package main
import (
"fmt"
"net"
"bufio"
"os"
)
func writeUnix(listener *net.UnixConn,dstAddr *net.UnixAddr) {
for {
bio := bufio.NewReader(os.Stdin)
buf,_,_:= bio.ReadLine()
_, err := listener.WriteToUnix(buf, dstAddr)
checkError(err)
}
}
func readUnix(listener *net.UnixConn) {
for {
buf :=make([]byte, 1400)
size, remote, err := listener.ReadFromUnix(buf)
checkError(err)
fmt.Println("recv:", string(buf[:size]), " from ", remote.String())
}
}
func checkError(err error) {
if err != nil {
fmt.Printf("Error: %s
", err.Error())
os.Exit(1)
}
}
func runUnix() {
addr, err := net.ResolveUnixAddr("unixgram", "/tmp/unix_gram_sock2")
checkError(err)
listener, err := net.ListenUnixgram("unixgram", addr)
defer listener.Close()
checkError(err)
//send to its subs
go readUnix(listener)
go writeUnix(listener,addr)
select{}
}
func main(){
runUnix()
}
コアapiはListenUnixgram,ReadFromUnix,WriteToUnixである.従来のUDPのapiと同様に、プロセス間通信に適用する、UDPのように柔軟な設計インタフェースであり、接続されていない、同時にclientとserverの2つのアドレスが必要であり、データの受信が容易である.
「/tmp/unix_gram_sock 2」の内部socketにより、unixドメイン内の通信であるため、パケット損失の問題を考慮することなく、他のプロセスと効率的に通信することができる.UDP通信であるため、パックとハーフパックの問題は考慮する必要がない.