Order Tray | Contact Us | Home | SIG Lists

[aprssig] Periodic Disconnects from APRS-IS

Gregg Wonderly gregg at wonderly.org
Thu Jan 18 17:29:49 UTC 2007


Scott Miller wrote:
> Last time I looked at a TCP dump of an APRS-IS connection, it seemed to be
> making rather inefficient use of the bandwidth.  I saw exactly one line per
> packet.  For slow ports (message only, local filters) this is fine - it
> keeps the stream from getting held up in the TCP buffers.  But for a full
> feed, it seems like you'd be better off offering a port that'd send a
> maximal length packet to reduce overhead.  Should reduce the packet count by
> about a factor of 10.
> 
> I don't know about Java's socket support, but I think in C it was a pretty
> simple configuration option.  Again, it's not what you want for everything,
> but it seems like an easy way to save bandwidth.

In Java, you can just use a BufferedWriter or BufferedOutputStream to make sure 
that writes are optimized.  I've been using the jdk1.5 concurrency tools so that 
  I can use a queue to stuff the outbound packets into, and then just dequeue 
and write through a buffered outputstream, flushing when the queue is empty.

Something like the following is a simple example without any attempts to manage 
CR/LF in any special way.

PrintStream out = new PrintStream( new BufferedOutputStream( 
sock.getOutputStream() ) );
LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>();
String pktln;
boolean done = false;

while( !done ) {
	pktln = queue.take();
	out.println(pktln);
	if( queue.peek() == null )
		out.flush();
}

Gregg Wonderly
W5GGW




More information about the aprssig mailing list