Skip to content

Commit e637962

Browse files
committed
clashapi: Remove traffic loop
1 parent 718380c commit e637962

File tree

3 files changed

+24
-53
lines changed

3 files changed

+24
-53
lines changed

experimental/clashapi/server.go

+10-6
Original file line numberDiff line numberDiff line change
@@ -321,27 +321,31 @@ func traffic(trafficManager *trafficontrol.Manager) func(w http.ResponseWriter,
321321
tick := time.NewTicker(time.Second)
322322
defer tick.Stop()
323323
buf := &bytes.Buffer{}
324-
var err error
324+
var (
325+
upTotal int64
326+
downTotal int64
327+
err error
328+
)
325329
for range tick.C {
326330
buf.Reset()
327-
up, down := trafficManager.Now()
331+
upTotalNew, downTotalNew := trafficManager.Total()
328332
if err := json.NewEncoder(buf).Encode(Traffic{
329-
Up: up,
330-
Down: down,
333+
Up: upTotalNew - upTotal,
334+
Down: downTotalNew - downTotal,
331335
}); err != nil {
332336
break
333337
}
334-
335338
if conn == nil {
336339
_, err = w.Write(buf.Bytes())
337340
w.(http.Flusher).Flush()
338341
} else {
339342
err = wsutil.WriteServerText(conn, buf.Bytes())
340343
}
341-
342344
if err != nil {
343345
break
344346
}
347+
upTotal = upTotalNew
348+
downTotal = downTotalNew
345349
}
346350
}
347351
}

experimental/clashapi/trafficontrol/manager.go

+1-45
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,18 @@ import (
1616
)
1717

1818
type Manager struct {
19-
uploadTemp atomic.Int64
20-
downloadTemp atomic.Int64
21-
uploadBlip atomic.Int64
22-
downloadBlip atomic.Int64
2319
uploadTotal atomic.Int64
2420
downloadTotal atomic.Int64
2521

2622
connections compatible.Map[uuid.UUID, Tracker]
2723
closedConnectionsAccess sync.Mutex
2824
closedConnections list.List[TrackerMetadata]
29-
ticker *time.Ticker
30-
done chan struct{}
3125
// process *process.Process
3226
memory uint64
3327
}
3428

3529
func NewManager() *Manager {
36-
manager := &Manager{
37-
ticker: time.NewTicker(time.Second),
38-
done: make(chan struct{}),
39-
// process: &process.Process{Pid: int32(os.Getpid())},
40-
}
41-
go manager.handle()
42-
return manager
30+
return &Manager{}
4331
}
4432

4533
func (m *Manager) Join(c Tracker) {
@@ -61,19 +49,13 @@ func (m *Manager) Leave(c Tracker) {
6149
}
6250

6351
func (m *Manager) PushUploaded(size int64) {
64-
m.uploadTemp.Add(size)
6552
m.uploadTotal.Add(size)
6653
}
6754

6855
func (m *Manager) PushDownloaded(size int64) {
69-
m.downloadTemp.Add(size)
7056
m.downloadTotal.Add(size)
7157
}
7258

73-
func (m *Manager) Now() (up int64, down int64) {
74-
return m.uploadBlip.Load(), m.downloadBlip.Load()
75-
}
76-
7759
func (m *Manager) Total() (up int64, down int64) {
7860
return m.uploadTotal.Load(), m.downloadTotal.Load()
7961
}
@@ -127,36 +109,10 @@ func (m *Manager) Snapshot() *Snapshot {
127109
}
128110

129111
func (m *Manager) ResetStatistic() {
130-
m.uploadTemp.Store(0)
131-
m.uploadBlip.Store(0)
132112
m.uploadTotal.Store(0)
133-
m.downloadTemp.Store(0)
134-
m.downloadBlip.Store(0)
135113
m.downloadTotal.Store(0)
136114
}
137115

138-
func (m *Manager) handle() {
139-
var uploadTemp int64
140-
var downloadTemp int64
141-
for {
142-
select {
143-
case <-m.done:
144-
return
145-
case <-m.ticker.C:
146-
}
147-
uploadTemp = m.uploadTemp.Swap(0)
148-
downloadTemp = m.downloadTemp.Swap(0)
149-
m.uploadBlip.Store(uploadTemp)
150-
m.downloadBlip.Store(downloadTemp)
151-
}
152-
}
153-
154-
func (m *Manager) Close() error {
155-
m.ticker.Stop()
156-
close(m.done)
157-
return nil
158-
}
159-
160116
type Snapshot struct {
161117
Download int64
162118
Upload int64

experimental/libbox/command_status.go

+13-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ func (s *CommandServer) readStatus() StatusMessage {
3333
if s.service != nil {
3434
message.TrafficAvailable = true
3535
trafficManager := s.service.clashServer.(*clashapi.Server).TrafficManager()
36-
message.Uplink, message.Downlink = trafficManager.Now()
3736
message.UplinkTotal, message.DownlinkTotal = trafficManager.Total()
3837
message.ConnectionsIn = int32(trafficManager.ConnectionsLen())
3938
}
@@ -50,8 +49,20 @@ func (s *CommandServer) handleStatusConn(conn net.Conn) error {
5049
ticker := time.NewTicker(time.Duration(interval))
5150
defer ticker.Stop()
5251
ctx := connKeepAlive(conn)
52+
var (
53+
status StatusMessage
54+
uploadTotal int64
55+
downloadTotal int64
56+
)
5357
for {
54-
err = binary.Write(conn, binary.BigEndian, s.readStatus())
58+
status = s.readStatus()
59+
upload := status.UplinkTotal - uploadTotal
60+
download := status.DownlinkTotal - downloadTotal
61+
uploadTotal = status.UplinkTotal
62+
downloadTotal = status.DownlinkTotal
63+
status.Uplink = upload
64+
status.Downlink = download
65+
err = binary.Write(conn, binary.BigEndian, status)
5566
if err != nil {
5667
return err
5768
}

0 commit comments

Comments
 (0)