- 论坛徽章:
- 36
|
本帖最后由 cokeboL 于 2013-09-27 10:35 编辑
1. 这种记录的数据是要消耗内存的,包量越大消耗也越大(当然内存对现在服务器来讲不是大问题,但能减少消耗肯定最好了)
每台机器应该有自己能转发的列表,以及上游下游的区分比如
a的
transmit_map =
{
//key value attr
'b', ip + port, pre/behind
}
b的
transmit_map =
{
//key value attr
'a', ip + port, pre/behind
'c', ip + port, pre/behind
}
依此推
a发一个请求的时候,请求包里包含一个请求序列栈
包头里包含一个请求序列栈长,request_stack_len
接收请求时,如果本机不是最后该请求所需到达的最后一台机器,就把本机id入栈,
把request_stack_len ++,并且转发给下一台机器
如果是最后一个机器,比如d,作为终结者,根据请求序列栈,把所查询的数据返回给上家
也就是请求的时候只发请求命令和请求序列,从最后一台机器开始返回数据,前面每台把自己的
数据加到其中,比如
a发请求给b:
[
... ,
request_stack_len = 1,
'a'
]
b收到继续转发给c
[
... ,
request_stack_len = 2,
'a',
'b'
]
c收到继续转发给d
[
... ,
request_stack_len = 3,
'a',
'b',
'c'
]
d收到后因为自己是最后一台,就取出序列栈尾c,并返回数据给c
[
... ,
return_stack_len = 2,
'a',
'b',
data_len = n,
[data]
]
c收到后把自己的数据加到里面返回给b
[
... ,
return_stack_len = 1,
'a',
data_len = n,
[data] //数据加到里面
]
|
|