Apache Thrift 远程服务超时

本文关键字:超时 远程服务 Thrift Apache | 更新日期: 2023-09-27 18:36:56

我设置Thrift来构建两个实体和一个相应的服务。我为 C# 生成了代码,为服务器创建了一个小型控制台应用程序,为测试客户端创建了另一个控制台应用程序。我在本地机器上运行了两者,它就像一个魅力。但是,在运行 Windows Server 2012 的 Azure VM 上部署服务器时,如果在端口 9090 上为 TCP 创建了终结点,我的客户端无法连接。有超时。

关于

SO的类似问题:这个问题是关于一个php库特定的问题,这个是关于两台Linux机器的。后者接近我的问题,但我可以想象我的问题特定于Windows或Azure VM。

我正在使用 NuGet 的 Thrift 0.9.0.0。我尝试了SimpleServer和ThreadPoolServer。这是我在服务器上做的事情:

Thrift.Server.TServer server = new Thrift.Server.TThreadPoolServer(new TodoThriftService.Processor(new TodoThriftServiceHandler()), new TServerSocket(9090));

这是我在客户端上所做的:

TodoThriftService.Client client = new TodoThriftService.Client(new TBinaryProtocol(new TSocket("my.host.com", 9090)));

我还尝试了服务器 IP 地址而不是其主机名,但它也不起作用。

netstat -an 输出为:

TCP    0.0.0.0:9090           0.0.0.0:0              LISTENING

从客户端的远程登录输出(远程 my.host.com 9090):

Verbindungsaufbau zu my.host.com...Es konnte keine Verbindung mit dem Host hergestellt werden, auf Port 9090: Verbindungsfehler

这是德语中的"连接错误"。

当我访问服务器上的 http://canyouseeme.org/并检查端口 9090 时,输出为:

Error: I could not see your service on 123.34.567.890 on port (9090). Reason: Connection timed out

当我在服务器上使用Wireshark嗅探数据包时,输出为:

1   0.000000000 12.3.456.78 12.34.567.89    TCP 66  53566 > websm [SYN] Seq=0 Win=8192 Len=0 MSS=1452 WS=256 SACK_PERM=1

和两次重传。

注意:Wireshark中显示的目标IP与 canyouseeme.org 确定的IP不同。

另请注意:来自我的测试客户端和 canyouseeme.org 的连接尝试都显示在 Wireshark 中。

我的服务器控制台应用程序是否做错了什么?它在我的本地计算机上工作正常。

Apache Thrift 远程服务超时

因为 netstat 报告您的服务器正在侦听 9090,并且因为 tcpdump 报告 SYN 数据包正在到达 9090,所以一定是其他东西阻止了客户端。

在这种情况下,我怀疑是某种本地防火墙(因为数据包确实到达了,但操作系统应该使用 SYN 数据包应答,而您没有看到)。检查 Windows 防火墙以确保端口 9090 已打开。