linux lua socket编程,Lua cosocket之unix通信

废话不多说,直接上code

unix server

package main

import (

"bufio"

"fmt"

"net"

"time"

)

func main() {

var unixAddr *net.UnixAddr

unixAddr, err := net.ResolveUnixAddr("unix", "/tmp/usk.sock")

if err != nil {

fmt.Println("resolve unix addr fail: " + err)

}

unixListener, err := net.ListenUnix("unix", unixAddr)

if err != nil {

fmt.Println("listen unix addr fail: " + err)

}

defer unixListener.Close()

for {

unixConn, err := unixListener.AcceptUnix()

if err != nil {

continue

}

fmt.Println("A client connected : " + unixConn.RemoteAddr().String())

go unixPipe(unixConn)

}

}

func unixPipe(conn *net.UnixConn) {

ipStr := conn.RemoteAddr().String()

defer func() {

fmt.Println("disconnected :" + ipStr)

conn.Close()

}()

reader := bufio.NewReader(conn)

for {

message, err := reader.ReadString('\n')

if err != nil {

return

}

fmt.Println(string(message))

// lua cosoket need '\n'

msg := time.Now().String() + "\n"

b := []byte(msg)

conn.Write(b)

}

}

nginx lua client

location /t/tcp {

resolver 8.8.8.8;

content_by_lua_block {

local sock = ngx.socket.tcp()

local ok, err = sock:connect("www.baidu.com", 80)

if not ok then

ngx.say("failed to connect to baidu: ", err)

return

end

ngx.say("successfully connected to baidu!")

sock:close()

}

}

location /t/unix {

resolver 8.8.8.8;

content_by_lua_block {

local sock = ngx.socket.tcp()

sock:settimeout(300) -- 0.3 second timeout

local ok, err = sock:connect("unix:/tmp/usk.sock")

if not ok then

ngx.say("failed to connect to unix: ", err)

return

end

ngx.say("successfully connected to unix!")

local bytes, err = sock:send("I am nginx\n")

if not bytes then

ngx.say("failed to send query: ", err)

return

end

local chunk,err = sock:receive()

if not chunk then

ngx.say("failed to receive a chunk: ", err)

return

end

ngx.say("content: ", chunk)

sock:close()

}

}

测试命令

➜ /tmp curl 127.0.0.1:8080/t/tcp

successfully connected to baidu!

➜ /tmp curl 127.0.0.1:8080/t/unix

successfully connected to unix!

content: 2020-10-09 03:06:07.196395662 +0000 UTC m=+9.032989967

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值