golang 可以监听多个端口吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 可以监听多个端口吗相关的知识,希望对你有一定的参考价值。
由于linux的socket监听机制和TCP协议,多个进程无法监听同一个端口,但是具体到nginx,可以多个nginx进程监听到不同端口,通过一个主进程端口做upstream来实现负载均衡,这个有点类似于网络的汇聚,可以设置不同的策略,比如iphash,urlhash或者RR。 参考技术A 您好,很高兴能帮助您,连接OpenVPN在配置好.ovpn文件后,执行openvpn/etc/***.ovpn即可连接服务器了。注意,上面的参数应该换成你的配置文件实际位置。此时,终端会回显很多连接日志。如果连接不成功,则可以通过这些日志来确定出错位置 参考技术B package mainimport (
"fmt"
"log"
"net"
"bufio"
"io"
)
func handleConnection(conn net.Conn)
br := bufio.NewReader(conn)
for
data, err := br.ReadString('\n')
if err == io.EOF
break
fmt.Printf("%s", data)
fmt.Fprintf(conn, "OK\n")
conn.Close()
func main()
ln, err := net.Listen("tcp", ":8092")
if err != nil
panic(err)
for
conn, err := ln.Accept()
if err != nil
log.Fatal("get client connection error: ", err)
go handleConnection(conn)
TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口
这是一个简单的包来解决重用地址的问题。 go net包(据我所知)不允许设置套接字选项。 这在尝试进行TCP NAT时尤其成问题,其需要在同一TCP端口上进行侦听和拨号的过程。 这个包使我有可能实现这个功能。 这是一个非常小众的用例,但也许这个软件包可以随着时间的推移变得更普遍。
此包允许从同一TCP端口侦听和拨号;不能使用同一UDP端口监听,但可以监听同一UDP端口。 这意味着设置了以下sockopts:
syscall.SO_REUSEADDR
syscall.SO_REUSEPORT
例子:
// listen on the same port.
l1, _ := reuse.Listen(“tcp”, “127.0.0.1:1234”)
l2, _ := reuse.Listen(“tcp”, “127.0.0.1:1234”)
// dial from the same port.
l1, _ := reuse.Listen(“tcp”, “127.0.0.1:1234”)
l2, _ := reuse.Listen(“tcp”, “127.0.0.1:1235”)
c1, _ := reuse.Dial(“tcp”, “127.0.0.1:1234”, “127.0.0.1:1235”)
c2, _ := reuse.Dial(“tcp”, “127.0.0.1:1234”, “127.0.0.1:1235”)
以下是完整TCP拨号例子,在Ubuntu 14.04 Sever测试通过
Server代码:
Client代码:
如果你有需要重用TCP/UDP的地址和端口的场景,可以尝试一下这个包,希望可以让你达到事半功倍的效果。
wxgzh:ludong86
以上是关于golang 可以监听多个端口吗的主要内容,如果未能解决你的问题,请参考以下文章
在一个 IP 上托管多个 Golang 站点并根据域请求提供服务?