代码之家  ›  专栏  ›  技术社区  ›  nagul

在TCP端口上监视服务器的最佳方法

  •  1
  • nagul  · 技术社区  · 15 年前

    我有一个远程音乐播放器守护进程(MPD)服务器在Linux机器上运行。我有一个客户机在另一台Linux机器上监听这个流。

    当请求MPD服务器暂停或停止流时,它将断开TCP端口上连接的所有客户端。因此,当服务器再次启动流式处理时,必须手动重新连接客户机。

    我想写一个程序,该程序将监视TCP端口以查找接受连接的服务器,然后自动重新启动客户端。我能比跑步做得更好吗 连接() 睡眠() 在循环中?有什么命令行实用程序可以做到这一点吗?

    如果有帮助的话,我可以在运行MPD服务器的机器上运行客户机。下面将告诉我一个进程是否在本地端口上侦听,但是如果进程没有侦听,它们不会阻塞,因此我仍然需要将它们包装成一个循环。

    $sudo fuser-N TCP 8000
    8000/TCP:9677

    $sudo netstat-nlp grep 8000
    TCP 0 0 0.0.0.0:8000 0.0.0.0:*收听9677/mpd

    我可以尝试任何不涉及更改MPD服务器行为的解决方案。

    2 回复  |  直到 15 年前
        1
  •  3
  •   quamrana    15 年前

    总是有可能编写一个代理MPD的中继服务器。

    它位于那里,为您的客户机监听一个不同的端口,并代替它们与MPD建立连接。当MPD断开连接时,继电器仅每隔几秒钟尝试重新连接,而不断开其客户机。

        2
  •  2
  •   Mark Rushakoff    15 年前

    干得好:

    echo -n "" | nc -q 0 localhost 8000 && echo "made a connection" || echo "server was down"
    

    echo -n "" 立即在stdin上输入eof; nc -q 0 在stdin上看到该EOF后立即返回。NC(netcat)尝试在端口8000上与本地主机建立连接。如果连接成功,则返回一个成功的错误代码,我们回送“已建立连接”;否则,如果连接被拒绝,则回送“服务器已关闭”。

    如果您想测试它,那么在另一个终端运行

    nc -lvvp 8000
    

    它将启动netcat在端口8000上监听的实例,并提供详细的输出。在另一个终端中,运行第一个命令。第一次运行它时,它会说已建立连接。然后服务器/侦听器将关闭,所以下次运行它时,它将显示服务器已关闭。