0%

rhino | 客户端和服务器的时间戳分析

有这样一个场景,你有多个服务器,然后订阅交易所的数据。

如何判断哪个服务器连接最快?

很多人可能觉得使用时间戳,接收时间剪去服务器数据发送时间。

但是,这样是不对的,因为,你不能确定你自己各个服务器的时间是否一致。先说一下结论,每一个服务器的时间一定是不一致的,微小的可能差几ms,但是,对于抢单来说,这几ms就是天差地别。

所以,需要通过连续数据的差值来判断自身服务器的速度。比如,下面是从一个服务器拿到的日志:

1
2
3
4
5
[06:52:32].436 w.py line:44 INFO    increase price BSCSUSDT 0.012173 3492.42 send: 1708066352433 get: 1708066352436
[06:52:32].444 w.py line:44 INFO increase price BUNNYUSDT 0.24206 46.76 send: 1708066352441 get: 1708066352444
[06:52:32].445 w.py line:44 INFO increase price BUNNYUSDT 0.21663 69.19 send: 1708066352442 get: 1708066352445
[06:52:32].451 w.py line:44 INFO increase price BUNNYUSDT 0.22517 0.0 send: 1708066352444 get: 1708066352451
[06:52:32].451 w.py line:44 INFO increase price BUNNYUSDT 0.22746 0.0 send: 1708066352447 get: 1708066352451
  • send 是交易所服务器发送数据时间
  • get 是自己服务器接收数据时间

分析数据如下:

  • 第一条和第二条的 send 差 8 ms,get 差 8 ms
  • 第二条和第三条的 send 差 1 ms,get 差 1 ms
  • 第三条和第四条的 send 差 2 ms,get 差 6 ms
  • 第四条和第五条的 send 差 3 ms,get 差 0 ms

从上面的数据可以得出结论

  • websocket 的数据推送并不是实时的,因为第4,5 条数据是同时获得的

另外一个服务器的日志。

1
2
3
4
5
[08:56:11].258 w.py line:44 INFO    increase price MBOXUSDT 0.3445 2098.3 send: 1708073771241 get: 1708073771258
[08:56:11].285 w.py line:44 INFO increase price XODEXUSDT 0.00036507 67548.59 send: 1708073771281 get: 1708073771285
[08:56:11].306 w.py line:44 INFO increase price MBOXUSDT 0.3449 5344.4 send: 1708073771302 get: 1708073771306
[08:56:11].426 w.py line:44 INFO increase price MBOXUSDT 0.3484 100.0 send: 1708073771421 get: 1708073771426
[08:56:11].443 w.py line:44 INFO increase price BUNNYUSDT 0.22257 63.6 send: 1708073771440 get: 1708073771443

这个数据分析如下:

  • 第一条和第二条的 send 差 40 ms,get 差 27 ms
  • 第二条和第三条的 send 差 21 ms,get 差 21 ms
  • 第三条和第四条的 send 差 119 ms,get 差 120 ms
  • 第四条和第五条的 send 差 19 ms,get 差 17 ms

从上面的数据来看,第二个服务器的显然更快一些。因为,sendget 的差值不算大。

请我喝杯咖啡吧~