TCP套接字连接是否适合持续的套接字开启/关闭?

3
我正在处理一个项目,需要每5分钟发送一次数据(不多,大概300B(+-100))。一侧是带有apache2服务器和额外的PHP脚本的树莓派,该脚本作为TCP套接字服务器。
另一侧有多个客户端连接到TCP套接字服务器。服务器建立连接、交换数据,然后关闭套接字。每个客户端每5分钟执行一次此操作(所以如果我有100个客户端,套接字将每分钟打开和关闭20次)。
这是处理这种连接的好方法吗?还是应该以某种不同的方式处理?使用PHP脚本可以吗?
2个回答

0

要么这样,要么连接每个客户端一次并保持连接。根据您指定的数字,两者都是有效的选择,但套接字是一种资源,操作系统无法无限制地分配新资源。因此,它将不得不重复使用它们,因此打开和关闭的方法可以很好地扩展,因为当前未使用的套接字可以被回收。

另一方面,如果您的服务器仅运行apache2以运行仅用作TCP套接字服务器的PHP脚本,则我认为这不是最佳方法。您可能可以使用WebSockets(仍然使用PHP)并通过CLI运行php而无需运行apache2。


不,我需要apache2运行,因为这个树莓派上也托管了一个网站。我真的很喜欢PHP,因为我需要从数据库发送数据,并且使用PHP PDO连接到数据库非常容易。我会尝试我的方式,看看如果有多个客户端连接会发生什么。顺便说一下,我是通过终端运行php脚本的(rc.local文件会在启动时运行该脚本)。 - Rok
啊,那你现在做的就很好了。 - apokryfos
好的,那我就这样做了,谢谢你的回答。关于安全方面有什么建议吗? - Rok
@Rok安全性是一个更大的话题,因为它取决于您需要实现什么。如果您担心数据包被拦截,那么HTTPS应该足够了,但如果您需要验证客户端是否具有发送数据的凭据,则需要一些基本的HTTP身份验证(这两者都可以在apache上配置)。 - apokryfos
PHP程序接收的数据实际上是通过Python TCP套接字客户端发送的,数据是客户端ID(然后使用该ID获取适当客户端的数据)。由于该网站是“私有”的 - 它甚至没有域名,我认为不需要太多安全措施。 - Rok

0

如果我理解正确,您有远程客户端正在打开TCP连接到在Raspberry Pi 2上运行的Apache HTTP服务器托管的PHP应用程序。 每5分钟一个客户端将连接到服务器并发送大约300字节(+/- 100字节)的数据。 所以,这是每5秒打开的一次TCP连接。对于树莓派来说,除非处理得到的300个字节需要巨大的CPU,否则这无关紧要。

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


基本上,PHP脚本(TCP套接字服务器)通过rc.local文件在启动时运行。这300个字节来自数据库(表不大,我预计有约300个条目和100个客户端)。 - Rok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接