通过套接字连续数据

时间:2013-05-25 23:50:25

标签: java sockets tcp

假设我有一个套接字,需要以随机(但很小)的间隔发送连续数据,假设每秒约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)这是一个可行的解决方案吗?是否可以保持两端的流打开,循环和写入/读取数据直到完成?

1 个答案:

答案 0 :(得分:2)

  

1)如果我像例子A那样一次发送一个对象,它们是否仍然可以串联到达?为了使其更好,如例B所示?

根据您发送的网络类型,它们肯定仍然可以在接收端串联到达。此外,如果您使用的是TCP,Nagle's algorithm的应用程序可能会引入更多的聚合和明显的延迟。

  

2)接收数据的线程是否可能尝试在发送整个对象之前读取数据,从而分割数据,并提出另一个我需要注意的问题?

这非常依赖于您的实现细节,并且无法使用提供的伪代码来回答。

  

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

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