从xmlrpc++ 的Method中获取客户信息

 xmlrpc++提供了一个很好的架构,服务器端方法只需要继承XmlRpcServerMethod,然后实现方法execute,就可以在服务器端新增方法(客户便可以在服务器端执行这个方法了)。非常的简单且方便。但其也有一个最大的问题,就是屏蔽了太多的细节。如果不修改这个库,你无法从外面获得更详细的信息,比如,当前已连接的客户数量,当前连接客户的信息,当前是哪个客户在请求方法等。当你需要这些信息时,便感到有些束手无策。
没有办法,只有修改库了。
需求:
在服务器端执行某方法时,需要知道,当前请求执行该方法的客户端socket信息。

修改部分如下:

1 新增类:SocketInfo,包含IP与端口,没有用系统提供的sockaddr_in

2 类XmlRpcSource 中新增SocketInfo属性,意味通讯对等端的socket信息

3 类XmlRpcServerMethod 中新增SocketInfo属性,保存当前执行该方法的客户端信息

4 方法:int XmlRpcSocket::accept(int fd),新增返回参数,返回客户socket信息SocketInfo
在 (int) ::accept(fd, (struct sockaddr*)&addr, &addrlen); 执行完毕后,将信息从addr中取出,并通过accept返回

5 方法:void XmlRpcServer::acceptConnection()
执行int s = XmlRpcSocket::accept(this->getfd())替换为修改后的accept,将SocketInfo取出
_disp.addSource之前,将该SocketInfo添加到新建的XmlRpcServerConnection*中

6 方法:bool XmlRpcServerConnection::executeMethod(const std::string& methodName,
                                      XmlRpcValue& params, XmlRpcValue& result)   在真正执行方法(也就是method->execute(params, result))之前,将类XmlRpcServerConnection对应的客户端信息SocketInfo设置到需要执行的方法method的SocketInfo中。

OK. 每次在服务器端执行方法的时候,都可以获取请求该方法的客户端IP与端口信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值