0

假设我有一个需要以随机(但很小)的间隔发送连续数据的套接字,可以说在任何时间跨度内每秒大约 20 个对象。

我正在等待我不确定如何处理的可能问题。

1) 如果我像示例 A 中那样一次发送一个对象,它们仍然可以成束到达吗?以便更好地执行示例 B 中的操作?

2)接收数据的线程是否可能会在发送整个对象之前尝试读取数据,从而拆分数据,并产生另一个我必须注意的问题?

用于发送数据的伪可能如下所示

示例 A

void run()
{
    get socket outputstream
    while (isBroadcasting)
    {
        if (myQueue.isEmpty() == false)
            send first object in queue through outputstream

        Thread.sleep(25);
    }
}

示例 B

void run()
{
    get socket outputstream
    while (isBroadcasting)
    {
        while (myQueue.isEmpty() == false)
            send all object in queue through outputstream

        Thread.sleep(25);
    }
}

最后像这样读

void run()
{
    get socket inputstream
    while (isReceiving)
    {
        get object(s) from inputstream and publish them to main thread

        Thread.sleep(25);
    }
}

3)这会是一个可行的解决方案吗?是否可以在两端保持流打开,循环和写入/读取数据直到完成?

4

1 回答 1

2

1) 如果我像示例 A 中那样一次发送一个对象,它们仍然可以成束到达吗?以便更好地执行示例 B 中的操作?

根据您发送它们的网络类型,它们肯定仍会成束地到达接收端。此外,如果您使用 TCP,应用Nagle 算法可能会引入更多的聚束和明显的延迟。

2)接收数据的线程是否可能会在发送整个对象之前尝试读取数据,从而拆分数据,并产生另一个我必须注意的问题?

这在很大程度上取决于您的实现细节,并且不可能用提供的伪代码来回答。

是否可以在两端保持流打开,循环和写入/读取数据直到完成?

是的,长时间使用这样的 TCP 连接是完全合理的。但是,如果由于某种原因连接丢失,您的应用程序必须愿意重新连接。

于 2013-05-26T00:13:43.127 回答