client 框架