1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2026-04-23 14:09:11 -04:00

long running reverse test case

This commit is contained in:
Darien Raymond
2018-10-28 09:08:43 +01:00
parent 7bc4667214
commit f1ab89d9d8
4 changed files with 239 additions and 14 deletions

View File

@@ -68,10 +68,7 @@ func (s *Portal) HandleConnection(ctx context.Context, link *vio.Link) error {
}
if isDomain(outboundMeta.Target, s.domain) {
muxClient, err := mux.NewClientWorker(*link, mux.ClientStrategy{
MaxConcurrency: 0,
MaxConnection: 256,
})
muxClient, err := mux.NewClientWorker(*link, mux.ClientStrategy{})
if err != nil {
return newError("failed to create mux client worker").Base(err).AtWarning()
}
@@ -157,7 +154,7 @@ func (p *StaticMuxPicker) PickAvailable() (*mux.ClientWorker, error) {
var minIdx int = -1
var minConn uint32 = 9999
for i, w := range p.workers {
if w.IsFull() {
if w.draining {
continue
}
if w.client.ActiveConnections() < minConn {
@@ -166,6 +163,18 @@ func (p *StaticMuxPicker) PickAvailable() (*mux.ClientWorker, error) {
}
}
if minIdx == -1 {
for i, w := range p.workers {
if w.IsFull() {
continue
}
if w.client.ActiveConnections() < minConn {
minConn = w.client.ActiveConnections()
minIdx = i
}
}
}
if minIdx != -1 {
return p.workers[minIdx].client, nil
}
@@ -181,10 +190,11 @@ func (p *StaticMuxPicker) AddWorker(worker *PortalWorker) {
}
type PortalWorker struct {
client *mux.ClientWorker
control *task.Periodic
writer buf.Writer
reader buf.Reader
client *mux.ClientWorker
control *task.Periodic
writer buf.Writer
reader buf.Reader
draining bool
}
func NewPortalWorker(client *mux.ClientWorker) (*PortalWorker, error) {
@@ -221,14 +231,15 @@ func (w *PortalWorker) heartbeat() error {
return newError("client worker stopped")
}
if w.writer == nil {
if w.draining || w.writer == nil {
return newError("already disposed")
}
msg := &Control{}
msg.FillInRandom()
if w.client.IsClosing() {
if w.client.TotalConnections() > 256 {
w.draining = true
msg.State = Control_DRAIN
defer func() {