最近发布了 gws v1.4.7
更新, 支持从 tcp conn
直接解析 websocket
协议, 降低内存占用. 大部分人使用 go websocket server
, 都是复用的 http server
, 这种劫持http
连接升级的方式, 最大的弊端就是浪费内存. 由于 go http hijack
的缺陷, 一些内存一直得不到释放, 大概每个连接 10KB. 测试 10000 个连接的场景, 换用 Demo2 方式, 内存占用立省 42.86%!
package main
import (
"github.com/lxzan/gws"
"log"
"net/http"
)
func main() {
upgrader := gws.NewUpgrader(new(gws.BuiltinEventHandler), nil)
http.HandleFunc("/connect", func(writer http.ResponseWriter, request *http.Request) {
socket, err := upgrader.Accept(writer, request)
if err != nil {
log.Printf(err.Error())
return
}
go socket.Listen()
})
if err := http.ListenAndServe(":3000", nil); err != nil {
log.Fatalf(err.Error())
}
}
package main
import (
"github.com/lxzan/gws"
"log"
)
func main() {
srv := gws.NewServer(new(gws.BuiltinEventHandler), nil)
if err := srv.Run(":3001"); err != nil {
log.Panicln(err.Error())
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.