C++ 在NAT后面实现restful Web服务

C++ 在NAT后面实现restful Web服务,c++,web-services,rest,long-polling,C++,Web Services,Rest,Long Polling,据我所知,在NAT背后的设备上实现rest Web服务是不可能的。所以我在寻找一些解决办法 是否可以使用长轮询来实现Web服务?这样,本地设备将调用远程客户端(这正是我想要的),客户端必须保持连接打开(保持活动?),直到客户端想要调用webservice方法。它可以这样做,因为连接仍然打开。呼叫后,客户端将立即向客户端发送另一个轮询。。。等 有可能以这种方式实施吗 我遇到的另一个解决方案是: -我对此不太了解,但听起来我可以用它实现Web服务。对吧? 还有其他几种解决方案,如转身或晕眩,但它们似

据我所知,在NAT背后的设备上实现rest Web服务是不可能的。所以我在寻找一些解决办法

是否可以使用
长轮询
来实现Web服务?这样,本地设备将调用远程客户端(这正是我想要的),客户端必须保持连接打开(保持活动?),直到客户端想要调用webservice方法。它可以这样做,因为连接仍然打开。呼叫后,客户端将立即向客户端发送另一个轮询。。。等 有可能以这种方式实施吗

我遇到的另一个解决方案是:

-我对此不太了解,但听起来我可以用它实现Web服务。对吧?

还有其他几种解决方案,如转身或晕眩,但它们似乎非常复杂

你有什么建议吗? 我在网络设备上使用c++/linux


编辑:端口转发不是一个选项。

在这个问题中,您有很多不同的概念。您当然可以在防火墙/NAT后面实现RESTful服务。。。您只需要配置防火墙/NAT以将连接转发到您的服务。存在防火墙/NAT设备超时连接的问题。。。在这里,您可以将设备配置为不这样做,也可以使用某种“保持活动”更新通信机制。“长轮询”有些不相关,被用作从服务器获取“交互式响应”的一种方式。。。基本上,服务器坐在客户机的轮询请求上,直到它有响应的内容,或者请求超时,客户机发出另一个轮询请求。眩晕和转身是更多与语音/视频通信相关的技术。我建议从简单地让防火墙/NAT设备将基于web的请求转发到web服务器开始。

在这个问题中,您有很多不同的概念。您当然可以在防火墙/NAT后面实现RESTful服务。。。您只需要配置防火墙/NAT以将连接转发到您的服务。存在防火墙/NAT设备超时连接的问题。。。在这里,您可以将设备配置为不这样做,也可以使用某种“保持活动”更新通信机制。“长轮询”有些不相关,被用作从服务器获取“交互式响应”的一种方式。。。基本上,服务器坐在客户机的轮询请求上,直到它有响应的内容,或者请求超时,客户机发出另一个轮询请求。眩晕和转身是更多与语音/视频通信相关的技术。我建议从简单地让防火墙/NAT设备将基于web的请求转发到web服务器开始。

您没有说您使用的是什么传输协议,我假设是HTTP

HTTP使用TCP/IP,因此设备NAT需要将连接请求重定向到服务器

还有其他方法,比如如果您有多个internet IP地址,那么请求也可以定向到服务器,但这比端口转发更复杂,所以我认为这不是您所拥有的

因此,基本上您需要配置端口转发。就像PABX一样,从外线打来的电话需要知道ramal才能打到电话,这是一个遥远的想法


如前所述,您所说的建议并不是为了这个目的,主要是为了客户端连接,对于许多NAT来说,这是不必要的,因为NAT已经准备好这样做了。

您没有说您使用的是什么传输协议,我假设是HTTP

HTTP使用TCP/IP,因此设备NAT需要将连接请求重定向到服务器

还有其他方法,比如如果您有多个internet IP地址,那么请求也可以定向到服务器,但这比端口转发更复杂,所以我认为这不是您所拥有的

因此,基本上您需要配置端口转发。就像PABX一样,从外线打来的电话需要知道ramal才能打到电话,这是一个遥远的想法


如前所述,您所说的建议并非针对此目的,主要是针对客户端连接,对于许多NAT来说,这是不必要的,因为NAT已经做好了这样做的准备。

不幸的是,转发端口不是一个选项:(如果您的服务器位于NAT后面,您需要NAT之外的客户端连接通过某种方式到达它。您在这里确实没有太多选项。转发连接,或使您的服务器具有公共地址(您仍然可以对公共地址设置防火墙,只是不能在没有转发的情况下进行NAT)。不幸的是,转发端口不是一个选项:(如果您的服务器位于NAT后面,您需要NAT之外的客户端连接通过某种方式到达它。您在这里真的没有太多选项。转发连接,或使您的服务器具有公共地址(您仍然可以对公共地址设置防火墙,只是在没有转发的情况下无法进行NAT).thanx对于答复,我希望我可以简单地转发端口,但在我的环境中这不是一个选项。thanx对于答复,我希望我可以简单地转发端口,但在我的环境中这不是一个选项。