###设计
一个服务端,两种客户端
####消费者客户端:
- image fetchImage(remoteServer)
返回一个验证码图片
- code returnImage(remoteServer, code, imageId)
返回验证码内容,获得结果
####生产者客户端:
- code sendImage(remoteServer, Binary)
发送Binary给server,等待code回来
####服务端:
- 接收Image,然后保存imageId,放入Quene B
- 接收fetch请求,从Quene A中取图,若Quene A为空,则从Quene B中取
- 接收验证码结果,次数小于阈值,放入Quene A,并与Quene A中同imageId的结果进行比较,然后返回当前请求的结果;当次数大于阈值,判断正确结果,然后返回给生产客户端结果。
###流程
用户访问dns时,判断QueneB的状态,若QueneB不为空,则启动代理,将请求指向fake server,然后用户跳转到fake server的验证码页面,然后用户输入验证码,返回正确页面,记录该用户ip。