[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [ecf-dev] File sharing inquiries...
|
Hi Rem,
Remy Suen wrote:
Hi everyone,
I'm Remy Suen (you can just call me Rem), as some of you may know if
you've been listening in on some of the past couple of ECF meeting
conference calls. I am one of the three students that are working on
ECF-related projects via Google's Summer of Code program.
I'm writing a clean room implementation of the BitTorrent protocol and then creating a provider plug-in for ECF's file sharing APIs.
I've got some issues I'd like to bring to the table in hopes that some
of you would be able to help with.
1. How does one actually limit upload/download rates?
I've been poking away at a number of BitTorrent issues and features
but have yet to start tackling this since I'm not even really sure how
to start. Is it really just a matter of having a thread in the
connection looking at past uploads and doing some kind of rolling
average and then deciding how much data to write to the channel/socket
in one second? This sounds like it could work (or not), but then now I
have two threads per connection, which sounds like a lot, although I'm
not sure if it really is. So any tips or hints on this would be most
appreciated as I don't even know where to begin.
For the filesharing API, some specification of upload/download rates
could be added to the API to allow providers (like Bittorrent) that
support such features to expose them to clients on an individual file
level (I assume BT supports setting rates at the level of individual
files...either before or during file retrieval).
2. How will the org.eclipse.ecf.fileshare API fit in with BitTorrent,
a bi-directional piece-sharing protocol?
The file sharing API is currently heavily biased towards unilateral
file transportation services (rightfully so), which really leaves
little API for me to use. I could certainly send
IFileShareRetrieveDataEvents per block that I receive from a peer, but
I can see that that getData() method isn't going to be really useful.
Similar arguments could be had for
IFileShareRetrieveStartEvent and its sending event counterparts. I guess what I'm trying to get at is that a BitTorrent provider for ECF is certainly doable
(and I think I'm pretty close to having a simple one done, but the
whole Namespace and ID concept seems awfully confusing to
me), but just what kind of useful
information can clients actually retrieve right now based on the current API?
Not very much...basically just the contents of the file itself. But my
intention with the fileshare API was to expose other methods (on either
the IFileShareContainer, IFileShareRetrieveConfig, or IFileShare) OR add
adapter interfaces via IAdaptable for categories of API like rate
control, statistics gathering, etc. Also new event types can easily be
created added for handling asynch responses to requests.
So what I would like to do is to have Remy propose a desired set of
features (e.g. rate control) and then we can propose an
enchancement/generalization of the file share API to support.
RE: the namespace/ID concept...the notion is have some sort of
structured and extensible way to represent addressing information (other
than just String or URI). The ECF namespace extension point allows ECF
providers to create their own types of IDs...with whatever structure
they require to refer to a remote service, file, user, etc. e.g.
ecf.provider.bt://slewis@localhost/path/to/filename.bt
or
http://www.eclipse.org/file.txt
or
ecftcp://ecf.eclipse.org:3282/server
There's a little more available here:
http://www.eclipse.org/ecf/documentation.html#Identity
But as usual more is needed.
Scott