如何解决将旧式套接字与节俭服务器一起使用?
如果我有一个预先存在的打开文件描述符,指的是已绑定且正在侦听的套接字,我如何使用它来初始化一个节俭服务器对象(最好是非阻塞服务器)并开始接受RPC请求?我见过的各种ThriftSocket对象仅接受地址/端口(或只是端口)参数来自己创建套接字。
解决方法
对于客户端,您有一个构造函数,可从文件描述符构造套接字:
/**
* Constructor to create socket from file descriptor.
*/
TSocket(THRIFT_SOCKET socket,std::shared_ptr<TConfiguration> config = nullptr);
在Unix系统上,您可以发现THRIFT_SOCKET
是int
,只需在此处输入您的描述符即可!
不幸的是,对于服务器端而言并非如此。继承TServerSocket
不能解决您的问题,因为内部套接字成员是私有的。
但是,所有旧服务器都以TServerTransport
作为参数。因此,该想法是继承TServerTransport
以创建自定义TServerSocket
。原始的TServerSocket
在这里可以提供帮助。
但是,事实是他们没有添加此功能的可能性,这可能意味着这样做并不安全。除了检查TServerSocket.cpp
来检查内部实现之外,您别无选择。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。