美文网首页GolangGoGolang语言社区
75.多端口监听和各端口各干各的事儿

75.多端口监听和各端口各干各的事儿

作者: 厚土火焱 | 来源:发表于2019-01-22 12:31 被阅读15次

一个应用不会只做一件事情,或只完成一个任务。通常是既要显示WEB页面,也要做长链接,可能你还同时需要给手机端提供数据服务。
那么,我需要在一个应用服务端,实现同时为多个请求的业务服务。这些服务通常是不在一个端口实现的。
利用go语言的端口监听和协程,实现一下这个。
建立一个项目,假设我们需要访问的端口有两个:25000,25001。我在main中先写一个数组,承载这两个端口。当然,你可以写更多的需要监听的端口进去。

ports := []string{":25000",":25001"}

然后,需要对这些个端口都进行监听。这就需要遍历了。使用for循环吧。

for _,v := range ports  {
        go func(port string) {
            //把端口都放入goroutine监听
            mux := http.NewServeMux()
            switch port {
            case ":25000":
                {
                    mux.HandleFunc("/", handler1)
                }
            case ":25001":
                {
                    mux.HandleFunc("/", handler2)
                }
            }

            http.ListenAndServe(port, mux)
        }(v)
    }

在这个循环里,使用一个switch来检查判断,当前的端口号是多少,然后不同的端口号去执行不同的函数 handler1和handler2。
这两个需要执行的函数就简单一点吧。说明问题就行。

func handler2(writer http.ResponseWriter, request *http.Request) {
    fmt.Fprintln(writer, "你想做什么就做什么吧!")
}

func handler1(writer http.ResponseWriter, request *http.Request) {
    fmt.Fprintln(writer, "Hello,Moon!")
}

一个打印出中文,一个打印出英文。(问候我最最喜欢的🌙)
现在是无法正常运行的,因为for循环执行完成后,程序就会自动关闭退出了。所以在后面再加一个空的select,让它可以一直运行下去。

    select {

    }

现在就可以运行了
两个端口的反馈,是不同的。


端口25001
端口25000

看一下完整代码

package main

import (
    "fmt"
    "net/http"
)

func main() {
    ports := []string{":25000",":25001"}
    for _,v := range ports  {
        go func(port string) {
            //把端口都放入goroutine监听
            mux := http.NewServeMux()
            switch port {
            case ":25000":
                {
                    mux.HandleFunc("/", handler1)
                }
            case ":25001":
                {
                    mux.HandleFunc("/", handler2)
                }
            }

            http.ListenAndServe(port, mux)
        }(v)
    }
    select {

    }
}

func handler2(writer http.ResponseWriter, request *http.Request) {
    fmt.Fprintln(writer, "你想做什么就做什么吧!")
}

func handler1(writer http.ResponseWriter, request *http.Request) {
    fmt.Fprintln(writer, "Hello,Moon!")
}

相关文章

  • 75.多端口监听和各端口各干各的事儿

    一个应用不会只做一件事情,或只完成一个任务。通常是既要显示WEB页面,也要做长链接,可能你还同时需要给手机端提供数...

  • 2019-02-11 网络知识

    各协议端口号 SSH 22 FTP 20 和 21 Telnet 23 SMTP 25 TFTP 69 HTTP ...

  • 华为USG6330配置本地端口镜像

    开启端口镜像功能后,将观测端口与网络流量分析设备相连,即可分析出镜像端口上的各应用报文的分布情况。 注意:开启端口...

  • 终归,各、各、各

    栀子花,白花瓣 一阵芬芳,永恒在夏天 香香的、甜甜的、暖暖的 可,闪电般的疼痛 将它拉回到了原点 隔窗观看池塘中的...

  • 各模拟器端口号

  • 各模拟器adb连接端口

    模拟器名称 默认连接端口夜神安卓模拟器 ...

  • 各干各的,就不爱了吗?

    冯唐曾经在微博上写了这么一段话: 什么是真正的爱情?真正的爱情就是你不喜欢吃羊肉,但是他喜欢吃羊肉,于是你也开始吃...

  • 各论各

    亲戚里有些因为辈分、姓氏联姻,以致称呼有些混乱。比如,我有个姨,是我外婆抱养的童养媳,后来嫁给和外公同姓但辈分较高...

  • 各活各的

    世界上有很多人 但痛只能自己担着 疲了、倦了、伤了都是自己的 不过 明天又是一天 你看天气多好啊 没什么大不了...

  • 赚钱需要规划

    成年人的世界有事儿说事,没事儿各干各的。 人生需要规划, 赚钱需要规划,结婚需要规划,上班需要规划。。。 这是N年...

网友评论

    本文标题:75.多端口监听和各端口各干各的事儿

    本文链接:https://www.haomeiwen.com/subject/iqsljqtx.html