【问题标题】:Sockets & Data Persistence套接字和数据持久性
【发布时间】:2010-11-16 00:49:59
【问题描述】:

这可能是一个新手问题,但是如果我打开并将一些数据写入套接字,然后退出子例程,使套接字超出范围,然后稍后尝试从另一个程序读取数据,当原始声明超出范围时,数据会仍然存在还是会消失?

谢谢,

N.

更多信息:

我正在尝试重写 2 个使用文件作为通信接口的程序。大体流程是:

主进程:写入数据。

主进程:在集群中的其他节点上生成辅助进程

主进程:等待辅助进程完成。

二级进程:读取数据(由main写入)

二级流程:写入数据

二级流程:退出

主进程:读取数据。

所以我本质上想用套接字替换文件的写入/读取/写入/读取(应该更快!)

【问题讨论】:

    标签: c sockets scope


    【解决方案1】:

    对于 TCP 套接字,您需要在发送数据之前打开双向连接,因此如果您没有接收端,则问题无关紧要。

    对于 UDP,如果在您发送数据时没有人在侦听套接字,那么除非您设法以足够快的速度打开侦听程序以使数据仍在网络驱动程序中传输,否则没有人会收到它。但是不要指望它,因为驱动程序内的“本地主机环回”不应该花费超过几微秒的时间来传递数据。

    附:如果您更详细地描述您的确切情况,也许您可​​以获得更合适的答案。你想达到什么目的?


    关于您的“更多信息”。您不能通过简单地用套接字替换文件并保持当前方案来使用套接字来做到这一点。但是,您可以尝试通过首先生成子进程然后才通过套接字向它们发送数据来更改方案。当孩子们完成后,他们通过套接字向父母返回一个答案,然后退出。

    从某种意义上说,这里效率低下,因为您必须分别向每个孩子发送相同的数据(除非您可以使用多播)。

    我不确定套接字是否会比文件快得多,但对于更复杂的方案它们肯定会更安全,并且还允许在不共享文件系统的机器之间进行分发。

    【讨论】:

      【解决方案2】:

      使用原始套接字时,如果在您写入数据时没有其他可用(连接)端点,则数据将丢失。在没有首先连接到另一个端点的情况下实际写入数据的唯一方法是使用 UDP,在这种情况下,如果没有匹配的端点可用,接收系统将简单地刷新数据。

      如果您想进行异步传递,则需要使用允许延迟传递的消息传递系统。在这种情况下,消息的接收者实际上是一个系统进程,它存储消息直到客户端请求它。实际通信发生在一个系统上的客户端和另一个系统上的系统进程之间,而另一个系统上的客户端在本地获取数据。您可以在http://en.wikipedia.org/wiki/Message_passing 阅读有关消息传递及其变体的更多信息。

      【讨论】:

        猜你喜欢
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 2015-12-23
        相关资源
        最近更新 更多