go单个应用监听多个端口

HeadwindFly · 2016-10-14 00:58:01 · 6756 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-10-14 00:58:01 的主题,其中的信息可能已经有所发展或是发生改变。

比如我一个web服务 想监听多个端口 比如:80、8080、443

在Google搜索到的文章说用go ListenAndServe()...

这样的做法有什么问题吗?正确的做法是怎样的


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6756 次点击  
加入收藏 微博
9 回复  |  直到 2019-05-24 10:11:26
stevewang
stevewang · #1 · 9年之前

你可以使用一个ServerMux注册处理函数,然后在多个goroutine里用ListenAndServe使用同一个ServeMux监听多个端口。

HeadwindFly
HeadwindFly · #2 · 9年之前
stevewangstevewang #1 回复

你可以使用一个`ServerMux`注册处理函数,然后在多个goroutine里用`ListenAndServe`使用同一个`ServeMux`监听多个端口。

en, 其实我想这样做,是否有潜在的问题呢?

stevewang
stevewang · #3 · 9年之前
HeadwindFlyHeadwindFly #2 回复

#1楼 @stevewang en, 其实我想这样做,是否有潜在的问题呢?

这是go官方推荐的做法

stevewang
stevewang · #4 · 9年之前
stevewangstevewang #3 回复

#2楼 @HeadwindFly 这是go官方推荐的做法

呃,看错帖子了。

stevewang
stevewang · #5 · 9年之前
HeadwindFlyHeadwindFly #2 回复

#1楼 @stevewang en, 其实我想这样做,是否有潜在的问题呢?

你担心什么潜在的问题?

HeadwindFly
HeadwindFly · #6 · 9年之前
stevewangstevewang #5 回复

#2楼 @HeadwindFly 你担心什么潜在的问题?

因为不太了解go,所以想问下是否会有潜在问题。 谢啦 我先按照这样写 看看会不会有问题。 感谢。

stevewang
stevewang · #7 · 9年之前
HeadwindFlyHeadwindFly #6 回复

#5楼 @stevewang 因为不太了解go,所以想问下是否会有潜在问题。 谢啦 我先按照这样写 看看会不会有问题。 感谢。

线程安全性是没有问题的,因为func (mux *ServeMux) ServeHTTP(w ResponseWriter, r *Request)本来就是在多goroutine环境下使用的。只要别在ListenAndServe之后调用HandleFunc等注册处理函数就可以。

alex_023
alex_023 · #8 · 9年之前

楼主的问题应该分为两方面: 一,单服务,多端口响应 按照前面大家所说,是没有问题的。rpc、http的注册,都是以单体方式驱动注册的服务。注册的时候,要用同一个服务实例注册。 二、服务的并发安全问题 注册服务确保同一对象,多协程的时候(rpc是用反射找到方法,然后通过关键字 go 驱动的方法的),要注意对数据的读写保护,避免崩溃。加个锁就好了。

hbgongen
hbgongen · #9 · 6年之前

servemux不能作为形参吗?

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传