【发布时间】:2018-10-01 03:05:36
【问题描述】:
func handleConn(w http.ResponseWriter, r *http.Request) {
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
if _, ok := err.(websocket.HandshakeError); !ok {
log.Println(err)
}
return
}
go writer(ws)
reader(r, ws)
}
func main() {
http.HandleFunc("/", handleConn)
}
我正在尝试使用 golang 构建一个高扩展性的 websocket 服务器。由于原生 go websocket 包缺乏支持,我使用https://github.com/gorilla/websocket。
对于每个连接,都会生成一个 goroutine 来处理对其的写入。用于扩展大量连接。假设我有 1M 的并发连接,那么服务器上应该有 1M 的 goroutines 将运行。
硬件规格:
16 GB 内存
4 核 CPU
2.5 GHz 英特尔酷睿 i5
它是否适用于大量连接而不影响性能?
【问题讨论】:
-
goroutines.com/10m 单台服务器可以处理 10M 个套接字。