Unix domain sockets in Go - Golang News https://golangnews.org/2019/02/unix-domain-sockets-in-go/

  1. package main

    import (
    "fmt"
    "log"
    "net"
    "os"
    "time"
    )

    const SockAddr = "/tmp/echo.sock"

    var reqCounter int64
    var startTime time.Time

    func init() {
    startTime = time.Now()

    }
    func echoServer(c net.Conn) {
    reqCounter += 1
    lastMilliseconds := time.Since(startTime)
    b1 := make([]byte, 128)
    n, err := c.Read(b1)
    fmt.Println("n, err", n, err, "b1", b1, "\nrcv\n", string(b1), "Client connected [%s]", c.RemoteAddr().Network())
    c.Close()
    ns := 10000000000.0
    lastSeconds := float64(lastMilliseconds) / ns
    fmt.Println("\nreqCounter=", reqCounter, "QPS=", float64(reqCounter)/lastSeconds)
    }

    func main() {

    if err := os.RemoveAll(SockAddr); err != nil {
    log.Fatal(err)
    }

    l, err := net.Listen("unix", SockAddr)
    if err != nil {
    log.Fatal("listen error:", err)
    }
    defer l.Close()

    for {
    // Accept new connections, dispatching them to echoServer
    // in a goroutine.
    conn, err := l.Accept()
    if err != nil {
    log.Fatal("accept error:", err)
    }

    go echoServer(conn)
    }
    }

  1. package main

    import (
    "fmt"
    "net"
    "time"
    )

    const SockAddr = "/tmp/echo.sock"

    func main() {

    for {
    c, err := net.Dial("unix", SockAddr)
    if err != nil {
    fmt.Println("c,err", c, err)
    continue
    }

    clientStr := "abc世界-1--" + time.Now().String()
    b1 := []byte(clientStr)
    n, err := c.Write(b1)
    fmt.Println(time.Now(), n, err, "clientStr\n", clientStr)

    e := c.Close()
    fmt.Println("e", e)

    }
    }


  

  1. Go/src/net/unixsock.go:57
  2.  
  3. // ResolveUnixAddr returns an address of Unix domain socket end point.
  4. //
  5. // The network must be a Unix network name.
  6. //
  7. // See func Dial for a description of the network and address
  8. // parameters.
  9. func ResolveUnixAddr(network, address string) (*UnixAddr, error) {
  10. switch network {
  11. case "unix", "unixgram", "unixpacket":
  12. return &UnixAddr{Name: address, Net: network}, nil
  13. default:
  14. return nil, UnknownNetworkError(network)
  15. }
  16. }

  

UNIX DOMAIN SOCKETS IN GO unix域套接字的更多相关文章

  1. PHP 调用 Go 服务的正确方式 - Unix Domain Sockets

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  2. Unix domain sockets

    #server: SERVER_PATH = "/tmp/python_unix_socket_server" def run_unix_domain_socket_server( ...

  3. php, hhvm与odp & Unix domain Socket方式

    接上一篇,复习一下 启动php或hhvm: php/sbin/php-fpm start hhvm/bin/hhvm_control start 启动nginx或lighttpd: webserver ...

  4. 网络协议之:socket协议详解之Unix domain Socket

    目录 简介 什么是Unix domain Socket 使用socat来创建Unix Domain Sockets 使用ss命令来查看Unix domain Socket 使用nc连接到Unix do ...

  5. Unix domain socket 简介

    Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信.socket 原本是为网络通讯设 ...

  6. UNIX域套接字(unix domain)

    UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 说明:UNIX域套接字比因特网套接字效率更高.它仅赋值数据:不进行协议处理,如添加或删除网络报头.计 ...

  7. Unix域套接字(Unix Domain Socket)介绍【转】

    本文转载自:http://blog.csdn.net/roland_sun/article/details/50266565 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Linux系统中, ...

  8. Unix Domain Socket 域套接字实现

    主要注意流程: STREAM SOCKET: Server :  socket() --->  bind() ---> listen()  ---> accept() Client: ...

  9. UNIX 域套接字——UNIX domain socket

    /*********************程序相关信息********************* * 程序编号:015 * 程序编写起始日期:2013.11.30 * 程序编写完成日期:2013.1 ...

随机推荐

  1. Asp.Net WebApi使用Websocket

    直接上代码 /// <summary> /// WebSocket Handler /// </summary> public class QWebSocketHandler ...

  2. 微信网页授权多次回调code请求

    最近在做微信网页授权的时候遇到一个问题如果直接从后台把微信授权的url参数什么的拼装好,然后直接redirect 这个url 会导致时不时的多次请求回调的url .网上说是因为网络原因,如果10s没有 ...

  3. AWS中国区使用https访问部署在S3上的网站

    问题描述 最近一个项目需要通过https的方式访问部署在S3上的网站,通过搜索引擎找到一篇文章,可以在AWS Global实现整个过程.但是目前AWS中国区有限制,CloudFront不能使用AWS ...

  4. [leetcode]203. Remove Linked List Elements链表中删除节点

    这道题很基础也很重要 重点就是设置超前节点 public ListNode removeElements(ListNode head, int val) { //超前节点 ListNode pre = ...

  5. maven打包,跳过生成javadoc

    有时候由于代码中注释错误(比如方法参数)或者maven javadoc插件版本有问题,导致打包报错,而我们着急打包验证问题,没有时间一一修改错误,这时候可以先跳过生成javadoc,继续下一步工作. ...

  6. ES6中class的使用+继承

    一.Class 介绍+基本语法(1).介绍通过class关键字,可以定义类.基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的 ...

  7. vuetify 属性集合

    1.v-form 组件具有 three 功能,可以通过在该组件上设置 ref 来访问它们. ref 允许我们访问组件上的内部方法,例如 <v-form ref="form"& ...

  8. 园子的品牌专区上新:NoSQL 数据库佼佼者 Aerospike

    品牌专区是园子去年推出的新楼盘,为优秀的科技企业在园子里提供一个地方,展示自己的品牌,分享自己的技术内容. 最近我们和国外领先的 NoSQL 数据库厂商 Aerospike 达成了合作,入驻了园子的品 ...

  9. JavaScript同步模式,异步模式及宏任务,微任务队列

    首先JavaScript是单线程的语言,也就是说JS执行环境中,负责执行代码的线程只有一个.一次只能执行一个任务,如果有多个任务的话, 就要排队,然后依次执行,优点就是更安全,更简单.缺点就是遇到耗时 ...

  10. MySQL中Exists和In的使用

    Exists关键字: exists表示存在,是对外表做loop循环,每次loop循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避 ...