Files
Work/yproxy/docs/Some Comments about pipelining-batching NNTP Commands.htm
2024-08-07 09:16:27 -04:00

291 lines
12 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0047)http://www.newsreaders.com/misc/pipelining.html -->
<HTML><HEAD><TITLE>Some Comments about pipelining/batching NNTP Commands</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">
<META content="MSHTML 5.50.4134.600" name=GENERATOR></HEAD>
<BODY bgColor=white>
<CENTER><FONT size=+2>NewsReaders.com: Technical Documents and
links</FONT></CENTER><!-- start header --><!-- TITLE: X --><!-- COLOR: X -->
<CENTER><FONT size=+2>an eMailman(sm) production</FONT></CENTER>
<CENTER><FONT size=+1>a site about newsgroups and software related to
them</FONT></CENTER><BR>
<HR>
<CENTER>[<A href="http://www.emailman.com/">eMailman</A>] [<A
href="http://www.emailman.com/emailorder/index.html">eMailOrder</A>] [<A
href="http://www.newsreaders.com/search/index.html">Search NewsReaders.com</A>]
[<A href="http://www.newsreaders.com/consult/index.html">Consulting</A>] [<A
href="http://www.newsreaders.com/credits/index.html">Credits</A>] </CENTER>
<HR>
<BR><A
href="http://209.235.94.18/emailman/emailmanform.cgi?name=addcorrect&amp;form=3">[Submit
Addition/Corrections]</A><BR><BR><!-- end header --><PRE>
Although it isn't explicitly stated in RFC 977, the nature of the
connection between the server and the client means that in practice a
client can batch or pipeline commands (send a series of commands and
receive a series of answers).
This has been empirically confirmed with the following news servers:
Changi
Diablo
DNEWS
INN
Leafnode
Microsoft Internet Services
Netscape-Collabra/3.52
RumorMill
Tortoise 2.1beta
Typhoon
There are commands which can NOT be batched because of their nature
(POST and other commands which change the state of the server and
may fail or return unexpected results, under certain conditions this
includes *GROUP).
This pipelining or batching of commands by the client can result in
significant speed improvements over the more traditional
command-&gt;response/command-&gt;response sequence.
Commands which may change the state and derail any batched commands:
MODE READER, POST, *GROUP, IHAVE, SLAVE, QUIT
*if GROUP fails because the group doesn't exist, then commands that
depend upon the article pointer or article number may also fail.
Thus using it to get the High/Low marks of a group is safe as long
as the result is parsed correctly when it is processed, but ARTICLE,
BODY, HEAD, NEXT and LAST can produce misleading or incorrect results
and should be avoided until after you have the response from GROUP.
</PRE>Below is a table listing commands, their typical response code, and
whether or not servers typically pipeline them. New commands discussed in the
NNTP-EXT Working Group are in italic, "unofficial" but nevertheless widely used
commands are in bold.
<H1>NNTP Commands</H1>
<TABLE cellSpacing=1 cellPadding=5 width=499 border=1>
<TBODY>
<TR>
<TD vAlign=center width="30%"><B>
<P>Command</B></P></TT></TD>
<TD vAlign=center width="60%"><B>
<P>Action &amp; Reply</P></B></TT></TD>
<TD vAlign=center align=middle width="10%"><B>
<P>Client May Batch</P></B></TT></TD></TR>
<TR>
<TD vAlign=top width="30%"><TT>
<DL>
<DT>&lt;initial connect&gt; </DT></DL></TT></TD>
<TD vAlign=top width="60%">
<P><TT>200 OK</TT>;<TT> 201 Posting OK</TT>;<TT> 205
Authenticate</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P><TT>No</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080><I>
<P><TT>MODE READER</I></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P>Optionally notes client is interactive; <TT>200</TT>, <TT>201</TT>,
<TT>205</TT> replies</TT></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P><TT>No</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT>SLAVE</TT></P></TD>
<TD vAlign=top width="60%">
<P><TT>Notes client serves many users [Obsolete]; <TT>202
Noted</TT></P></TT></TD>
<TD vAlign=top align=middle width="10%">
<P><TT>No</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT>LIST <B><I>EXTENSIONS</B></I></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P><TT>202 Supported Extensions</TT> followed, one per line</TT></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%"><I>
<P><TT>AUTHINFO USER name<BR>AUTHINFO PASS pass</I></TT></P></TD>
<TD vAlign=top width="60%"><TT>
<DL>
<DT>350 Continue with PASS</TT><BR><TT>A cleartext password system</TT>
</DT></DL></TD>
<TD vAlign=top align=middle width="10%"><TT>No</TT></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080><I>
<P><TT>AUTHINFO GENERIC </TT>...</I></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<DL>
<DT>Arbitrary auth procedure: <TT>250 Accepted</TT>; <TT>452 Rejected
</DT></DL></TT>
<P></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P><TT>No</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT>LIST <I>[ACTIVE [wild]]</I></TT></P></TD>
<TD vAlign=top width="60%">
<P>For all, active, or only matching group names,
list:<BR><TT>&lt;group&gt; &lt;last&gt; &lt;first&gt; &lt;post?&gt;</TT>
(<TT>y</TT>es/<TT>n</TT>o/<TT>m</TT>od)</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT>LIST <I>DISTRIBUTIONS</I></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P><TT>215</TT> lists &amp; describes valid "regions" at this server
</TT></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT>LIST <I>NEWSGROUPS wild</I></TT></P></TD>
<TD vAlign=top width="60%"><TT>
<DL>
<DT>215</TT> lists one-line descriptions of all or matching groups
</DT></DL></TT>
<P></P></TD>
<TD vAlign=top align=middle width="10%">
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080><I>
<P><TT>LISTGROUP [ggg]</I></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P><TT>211</TT> lists all articles by number; resets pointer to
first</TT></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%"><I>
<P><TT>OVER [range]</I></TT></P></TD>
<TD vAlign=top width="60%">
<P><TT>224</TT> returns all headers cached in a news overview
dbase</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080><I>
<P><TT>PAT hdr range|ID pat</I></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080><TT>
<DL>
<DT>221</TT> lists headers of specified articles with matching values
</DT></DL></TT>
<P></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT>NEWGROUPS time dist</TT></P></TD>
<TD vAlign=top width="60%"><TT>
<DL>
<DT>[YY]YYMMDD HHMMSS [GMT|UTC]</TT>; and distribution limits
</DT></DL></TT>
<P></P></TD>
<TD vAlign=top align=middle width="10%">
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT>NEWNEWS gs time dist</TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P><TT>230</TT> lists article-IDs in group(s) -- wildcard matching is
OK</TT></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT>GROUP ggg</TT></P></TD>
<TD vAlign=top width="60%">
<P><TT>211 &lt;est-num&gt; &lt;first&gt; &lt;last&gt; &lt;group&gt;
selected</TT> [Sets current-article-pointer to first message of this
group, if the group doesn't exist the article pointer remains unchanged,
if the group exist but is empty the article pointer is indeterminate and
should be avoided]</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P><TT>Yes<BR>(To get High/Low marks)</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT>NEXT</TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P>Advances current-article-pointer (skips "holes')</TT></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" height=30>
<P><TT>LAST</TT></P></TD>
<TD vAlign=top width="60%" height=30>
<P>Advances current-article-pointer to end of group</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT>ARTICLE[&lt;msgid&gt;|nnn]<BR>HEAD [&lt;msgid&gt;|nnn]<BR>BODY
[&lt;msgid&gt;|nnn]</TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P>Send current [or specified] article's headers, body, or both
<BR>Specifying an article-number advances the current-article<BR><TT>220
&lt;art-num&gt; &lt;art-ID&gt; head or body follows</TT></P></TD>
<TD vAlign=center align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT>STAT [&lt;msgid&gt;|nnn]</TT></P></TD>
<TD vAlign=top width="60%">
<P>Check if current [or specified] article is still valid; no
data</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT>POST</TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080>
<P><TT>340 Send article</TT>; <TT>240 Received OK</TT> (for
clients)</TT></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P><TT>No</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT>IHAVE &lt;msgid&gt;</TT></P></TD>
<TD vAlign=top width="60%">
<P><TT>345 Transfer article</TT>; <TT>435 Not Wanted</TT> (for
servers)</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P><TT>No</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT><B>XHDR header [range|&lt;msgid&gt;]</B></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080><TT>
<DT>
<P>221 lists article number/msgid followed by the header contents
</TT></P></DT></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%">
<P><TT><B>XOVER [range]</B></TT></P></TD>
<TD vAlign=top width="60%">
<P><TT>224</TT> returns all headers cached in a news overview
dbase</TT></P></TD>
<TD vAlign=top align=middle width="10%">
<P>Yes</TT></P></TD></TR>
<TR>
<TD vAlign=top width="30%" bgColor=#008080>
<P><TT><B>XPAT hdr [range|&lt;msgid&gt;] pat</B></TT></P></TD>
<TD vAlign=top width="60%" bgColor=#008080><TT>
<DL>
<DT>221</TT> lists headers of specified articles with matching values
</DT></DL></TT>
<P></P></TD>
<TD vAlign=top align=middle width="10%" bgColor=#008080>
<P>Yes</TT></P></TD></TR></TBODY></TABLE><!-- start footer --><!-- Changed per Andrew, 2000/01/25 -->
<HR>
<CENTER>[<A href="http://www.newsreaders.com/">NewsReaders.com</A>] [<A
href="http://209.235.94.18/privatesuite/multiform.cgi?name=Webmaster">Webmaster</A>]
</CENTER>
<HR>
<CENTER>If you aren't happy with your ISP's newsfeed, try a <A
href="http://www.newsreaders.com/newsfeeds/index.html">subscription
newsfeed</A>. </CENTER><!-- end footer --></BODY></HTML>