【问题标题】:Is TCP socket connection good for continuous socket opening/closingTCP套接字连接是否适合连续打开/关闭套接字
【发布时间】:2016-08-03 08:28:16
【问题描述】:

我正在做一个项目,我需要每 5 分钟发送一次数据(不多,一次 ~300B(+-100))。一侧是一个带有 apache2 服务器的树莓派和一个用作 TCP 套接字服务器的附加 PHP 脚本。

另一方面,有多个客户端连接到 TCP 套接字服务器。服务器建立连接,它们交换数据,然后关闭套接字。每个客户端每 5 分钟发生一次(所以如果我有 100 个客户端,套接字将每分钟打开和关闭 20 次)。

这是处理此类连接的好方法,还是我应该以某种不同的方式处理? PHP脚本好吗?

【问题讨论】:

    标签: php sockets tcp


    【解决方案1】:

    要么这样,要么将每个客户端连接一次并保持连接处于活动状态。您指定的数字都是有效的选择,但套接字是一种资源,操作系统无法真正无限分配新资源。因此,它将不得不重用它们,因此这种打开和关闭的方法是一种可扩展的方法,因为当前未使用的套接字可以回收。

    另一方面,如果您的服务器运行 apache2 的唯一原因是运行仅用作 TCP 套接字服务器的 PHP 脚本,那么我会说这不是最好的方法。您可能可以使用WebSockets(仍在使用 PHP)并通过 CLI 运行 php,而无需运行 apache2。

    【讨论】:

    • 不,我需要运行 apache2,因为这个树莓上也有一个网站。我真的很喜欢 PHP,因为我需要从数据库发送数据,而且使用 PHP PDO 很容易连接到数据库。我会尝试我的方式,看看如果有多个客户端连接会发生什么。顺便说一句,我正在通过终端运行 php 脚本(rc.local 文件在启动时运行脚本)
    • 啊,那你做的就好了。
    • 好吧,那我就这样做了,谢谢你的回答。有什么关于安全的建议吗?
    • @Rok Security 是一个更大的话题,因为它取决于你需要用它实现什么。如果您担心数据包被拦截,那么 HTTPS 应该就足够了,但是如果您需要验证客户端是否具有发送数据的凭据,那么您将需要某种基本的 HTTP 身份验证(两者都可以在 apache 上配置) )。
    • PHP程序接收到的数据实际上是通过python TCP socket客户端发送的,data是一个客户端ID(该ID用于获取相应客户端的数据)。由于该网站是“私有的”——它甚至没有域,我认为我不需要太多的安全性。
    【解决方案2】:

    因此,如果我没看错的话,您的远程客户端正在打开 TCP 连接到运行在树莓派 2 上的 Apache HTTP 服务器上托管的 PHP 应用程序。 客户端将每 5 分钟连接到服务器并发送大约 300 字节(+/- 100 字节)的数据。 所以,这是每 5 秒打开一次 TCP 连接。这对 Raspberry Pi 来说不算什么,除非它需要大量的 CPU 来处理你得到的 300 个字节。

    我不建议尝试将网络连接保持 5 分钟(使用 TCP keep-alive 和/或 HTTP keep-live 和/或使用 Web 套接字),因为负载太低了,你会放更多尽量让系统保持 100 个连接处于活动状态,而不是让它们每 5 分钟重新连接一次。

    【讨论】:

    • 是的,PHP 脚本(TCP 套接字服务器)在启动时通过 rc.local 文件运行。这 300 个字节来自数据库(表并不大,我预计有 100 个客户端约 300 个条目)。
    猜你喜欢
    • 2013-04-29
    • 2011-08-31
    • 2023-03-21
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多