miner sessionId 类型为 uint16_t的疑问
Closed this issue · 4 comments
@SwimmingTiger
btcagent是把8 bytes的extranonce2,拆成4bytes的miner_sessionId和4bytes的miner_extranonce2,那么这里的sessionId_为什么不直接定义为uint32_t,而是定义为uint16_t,请问这里限制miner上限为65535的目的是什么呢?
btcagent/src/bitcoin/ServerBitcoin.cc
Lines 769 to 808 in 0222174
每个上行连接超过1万台矿机,我估计上行连接会受不了。除非改变架构,自动增加上行连接,否则增加下行连接没有太大的意义。
@SwimmingTiger
明白了,现在up session是5个,最大127?(这个限制跟魔法数字0x7f有什么关系吗?),所以限制down session最大为6w,如果扩展up session的话,理论上单agent是不是就可以不受限了,当然pool测也要配合修改 agent sessionId -> uint32_t
0x7f
只是用来识别agent
二进制消息的,就像JSON对象以{
开头,agent
二进制消息以0x7f
开头。
pool
侧不需要修改也可以,因为上行连接的session id都是独立的。所以连接a和连接b可以有不同的session id,互不影响。
所以,只要把session id分配器由一个改成多个,每个上行连接一个,就可以实现扩展了。
其实目前已经可以实现这种方案了,就是在linux里用同一配置文件启动多个agent进程。它们会监听在相同端口,Linux会通过SO_REUSEPORT
机制进行负载均衡,总客户端数量可以超过6万个。
@YihaoPeng
好的,谢谢