假设我有一个套接字,需要以随机(但很小)的间隔发送连续数据,假设每秒约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)这是一个可行的解决方案吗?是否可以保持两端的流打开,循环和写入/读取数据直到完成?
答案 0 :(得分:2)
1)如果我像例子A那样一次发送一个对象,它们是否仍然可以串联到达?为了使其更好,如例B所示?
根据您发送的网络类型,它们肯定仍然可以在接收端串联到达。此外,如果您使用的是TCP,Nagle's algorithm的应用程序可能会引入更多的聚合和明显的延迟。
2)接收数据的线程是否可能尝试在发送整个对象之前读取数据,从而分割数据,并提出另一个我需要注意的问题?
这非常依赖于您的实现细节,并且无法使用提供的伪代码来回答。
是否可以保持两端的流开放,循环和写入/读取数据直到完成?
是的,长时间使用这样的TCP连接是完全合理的。但是,如果由于某种原因连接丢失,您的应用程序必须愿意重新连接。