57 lines
3.2 KiB
HTML
57 lines
3.2 KiB
HTML
{% extends "global/layout.html" %}
|
|
{% block title %}{% trans %}Ministreaming Library{% endtrans %}{% endblock %}
|
|
{% block content %}
|
|
|
|
<h2>{% trans %}Note{% endtrans %}</h2>
|
|
|
|
<p>{% trans streaming=site_url('docs/api/streaming'), api='http://'+i2pconv('idk.i2p/javadoc-i2p')+'/net/i2p/client/streaming/package-summary.html' -%}
|
|
The ministreaming library has been enhanced and extended by the
|
|
"full" <a href="{{ streaming }}">streaming library</a>.
|
|
Ministreaming is deprecated and is incompatible with today's applications.
|
|
The following documentation is old.
|
|
Also note that streaming extends ministreaming in the same Java package (net.i2p.client.streaming),
|
|
so the current <a href="{{ api }}">API documentation</a> contains both.
|
|
Obsolete ministreaming classes and methods are clearly marked as deprecated in the Javadocs.
|
|
{%- endtrans %}</p>
|
|
|
|
<h2>{% trans %}Ministreaming Library{% endtrans %}</h2>
|
|
|
|
<p>{% trans i2cp=site_url('docs/protocol/i2cp') %}
|
|
The ministreaming library is a layer on top of the core
|
|
<a href="{{ i2cp }}">I2CP</a> that allows reliable, in order, and authenticated streams
|
|
of messages to operate across an unreliable, unordered, and unauthenticated
|
|
message layer. Just like the TCP to IP relationship, this streaming
|
|
functionality has a whole series of tradeoffs and optimizations available, but
|
|
rather than embed that functionality into the base I2P code, it has been factored
|
|
off into its own library both to keep the TCP-esque complexities separate and to
|
|
allow alternative optimized implementations.
|
|
{%- endtrans %}</p>
|
|
|
|
<p>{% trans i2ptunnel=site_url('docs/api/i2ptunnel'), minwww=site_url('misc/minwww') -%}
|
|
The ministreaming library was written by mihi as a part of his
|
|
<a href="{{ i2ptunnel }}">I2PTunnel</a> application and then factored out and released
|
|
under the BSD license. It is called the "mini"streaming library because it makes
|
|
some simplifications in the implementation, while a more robust streaming library
|
|
could be further optimized for operation over I2P. The two main issues with
|
|
the ministreaming library are its use of the traditional TCP two phase
|
|
establishment protocol and the current fixed window size of 1. The establishment
|
|
issue is minor for long lived streams, but for short ones, such as quick HTTP
|
|
requests, the impact can be <a href="{{ minwww }}">significant</a>. As for the window
|
|
size, the ministreaming library doesn't maintain any ID or ordering within the
|
|
messages sent (or include any application level ACK or SACK), so it must wait
|
|
on average twice the time it takes to send a message before sending another.
|
|
{%- endtrans %}</p>
|
|
|
|
<p>{% trans api='http://'+i2pconv('idk.i2p/javadoc-i2p')+'/net/i2p/client/streaming/package-summary.html',
|
|
samv3=site_url('docs/api/samv3') -%}
|
|
Even with those issues, the ministreaming library performs quite well in many
|
|
situations, and its <a href="{{ api }}">API</a>
|
|
is both quite simple and capable of remaining unchanged as different streaming
|
|
implementations are introduced. The library is deployed in its own
|
|
ministreaming.jar.
|
|
Developers in Java who would like to use it can
|
|
access the API directly, while developers in other languages can use it through
|
|
<a href="{{ samv3 }}">SAM</a>'s streaming support.
|
|
{%- endtrans %}</p>
|
|
{% endblock %}
|