Browse Source

add Listen() function

joe 4 years ago
parent
commit
6f5de94dce
5 changed files with 54 additions and 0 deletions
  1. 1 0
      README.cn.md
  2. 1 0
      go.mod
  3. 2 0
      go.sum
  4. 41 0
      listener_others.go
  5. 9 0
      listener_windows.go

+ 1 - 0
README.cn.md

@@ -13,6 +13,7 @@ see sample/
 - 支持内置默认的 listener
 - 根据实际使用添加更方便使用的高层函数
 - 支持流量等状态统计
+- session.Do() 消费者 goroutine 支持 1对多
 
 ## NO PLAN
 

+ 1 - 0
go.mod

@@ -5,4 +5,5 @@ go 1.15
 require (
 	github.com/gorilla/mux v1.8.0
 	github.com/gorilla/websocket v1.4.2
+	github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a
 )

+ 2 - 0
go.sum

@@ -2,3 +2,5 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
 github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc=
+github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=

+ 41 - 0
listener_others.go

@@ -0,0 +1,41 @@
+//+build linux
+
+package nnet
+
+import (
+	"github.com/valyala/tcplisten"
+	"net"
+	"syscall"
+)
+
+var cfg = tcplisten.Config{
+	ReusePort: true, DeferAccept: true, FastOpen: true, Backlog: 0,
+}
+
+func Listen(addr string) (net.Listener, error) {
+	err := setMaxConn()
+	if err != nil {
+		return nil, err
+	}
+
+	return cfg.NewListener("tcp4", addr)
+}
+
+func setMaxConn() error {
+	var RLimit syscall.Rlimit
+	err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &RLimit)
+	if err != nil {
+		return err
+	}
+	RLimit.Cur = 800000
+	RLimit.Max = 800000
+	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &RLimit)
+	if err != nil {
+		return err
+	}
+	err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &RLimit)
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 9 - 0
listener_windows.go

@@ -0,0 +1,9 @@
+//+build windows
+
+package nnet
+
+import "net"
+
+func Listen(addr string) (net.Listener, error) {
+	return net.Listen("tcp", addr)
+}