golang 可以监听多个端口吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 可以监听多个端口吗相关的知识,希望对你有一定的参考价值。

由于linux的socket监听机制和TCP协议,多个进程无法监听同一个端口,但是具体到nginx,可以多个nginx进程监听到不同端口,通过一个主进程端口做upstream来实现负载均衡,这个有点类似于网络的汇聚,可以设置不同的策略,比如iphash,urlhash或者RR。 参考技术A 您好,很高兴能帮助您,连接OpenVPN在配置好.ovpn文件后,执行openvpn/etc/***.ovpn即可连接服务器了。注意,上面的参数应该换成你的配置文件实际位置。此时,终端会回显很多连接日志。如果连接不成功,则可以通过这些日志来确定出错位置 参考技术B package main
import (
"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 可以监听多个端口吗的主要内容,如果未能解决你的问题,请参考以下文章

手撸golang GO与微服务 ChatServer之2

golang 使用错误总结

在一个 IP 上托管多个 Golang 站点并根据域请求提供服务?

用golang chromedp 操作已经打开的chrome浏览器

一个MDB可以监听多个监听端口吗

golang的包允许出现相同的函数吗