[Spread-users] Problem with Java client

Ryan Caudy rcaudy at gmail.com
Wed Aug 17 20:01:07 EDT 2005


It sounds to me like there's some sort of buffering going on in the
Java client at the socket level.

If I had to guess, I would say that this is because the Spread Java
API isn't using TCP_NODELAY.  The C API is, and hence wouldn't be
subject to the same problem, assuming that my hypothesis is correct.

Attached to this message is a patch to SpreadConnection.java
(generated against the latest CSV version) which should set this
socket option.

Please let me know if this helps.

Cheers,
Ryan

On 8/17/05, Jarosław Nozderko <jaroslaw.nozderko at polkomtel.com.pl> wrote:
> (Upgraded to Spread 3.17.3)
> 
> Experiments indicate that message from Java client
> gets lost when SpreadConnection.disconnect() (which
> sends KILL_MESS) is called immediately after
> SpreadConnection.multicast() and SpreadGroup.leave()
> (which sends LEAVE_MESS). If program sleeps for a moment
> (100-1000 ms) before calling disconnect(), message is delivered.
> 
> I'm sending messages with my test client to spuser (C version).
> If there is a delay between leave() and disconect(),
> spuser gets the message and then reports membership
> message "Due to the LEAVE of" sender.
> 
> If there is no delay, message is *not* delivered and
> after JOIN message spuser reports membership message
> "Due to the DISCONNECT of" sender.
> 
> However, C client doesn't seem to exhibit such
> behavior - message is delivered even when SP_multicast(),
> SP_leave() and SP_disconnect() are called immediately,
> without any delay and receiving spuser always gets
> membership JOIN, the message itself and membership LEAVE
> (not DISCONNECT) - this applies to both C spuser and
> Java User tool.
> 
> I'm quite new to Spread, so I didn't dig into all papers
> and the whole source code yet, but does anyone have an
> idea what is the reason of this difference ?
> Unfortunately, I can't use ethereal or similar tool
> in this environment.
> 
> Regards,
> Jarek
> 
> >
> > Hi,
> >
> >  I have a problem with Spread Java client.
> > This is probably some my basic mistake, but I'd be glad if
> > anyone could take a look at this.
> >
> > I created Java client, like this:
> >
> >
> > //------------------------------------------------------------
> > ----------
> >  // [1] Connecting:
> >  SpreadConnection  spreadConnection = new SpreadConnection();
> >  InetSocketAddress isa = new InetSocketAddress(spread_host,
> > spread_port);  InetAddress adr = isa.getAddress();
> > spreadConnection.connect(adr, 0, private_name, false, true);
> >
> > //------------------------------------------------------------
> > ----------
> >  // [2] Joining:
> >  String group = "grupa";
> >  SpreadGroup spreadGroup = new SpreadGroup();
> > spreadGroup.join(spreadConnection, group);
> >
> > //------------------------------------------------------------
> > ----------
> >  // [3] Sending message:
> >  SpreadMessage msg = new SpreadMessage();  msg.setFifo();
> > String target = "grupa";  msg.addGroup(target);
> > //msg.addGroup(spreadGroup);  String text = "Hello from Java
> > !";  msg.setData(text.getBytes());  short type = 177;
> > msg.setType(type);  spreadConnection.multicast(msg);
> >
> > //------------------------------------------------------------
> > ---------------
> >  // [4] Leaving:
> >  spreadGroup.leave();
> >
> > //------------------------------------------------------------
> > ---------------
> >  // [5] Disconnecting:
> >  spreadConnection.disconnect();
> >
> > //------------------------------------------------------------
> > ---------------
> >
> > If I don't join group "grupa" (sections [2] and [4] commented
> > out), sending message works - group members receive it. Of
> > course, there are no membership messages. But if I try to
> > send message to joined group (section [2] present, using
> > SpreadMessage.addGroup(String) or
> > SpreadMessage.addGroup(SpreadGroup)), group members get only
> > membership messages - the message itself is *not* delivered
> > (tried setReliable(),
> > setUnreliable() and setFifo()).
> >
> > Do I miss something obvious ? If not, can anyone confirm/deny this ?
> > C client seem to work well, message is always delivered.
> >
> > Spread version 3.17.2 on HP-UX B.11.11 U 9000/800, although
> > Java SpreadVersion.get*Version reports 3.16.1.
> >
> > $ java -version
> > java version "1.4.2.06"
> > Java(TM) 2 Runtime Environment, Standard Edition (build
> > 1.4.2.06-041015-11:00) Java HotSpot(TM) Server VM (build
> > 1.4.2 1.4.2.06-041015-12:38-PA_RISC2.0 PA2.0 (aCC_AP), mixed mode)
> >
> > Thanks for any help,
> > Jarek
> >
> > _______________________________________________
> > Spread-users mailing list
> > Spread-users at lists.spread.org
> > http://lists.spread.org/mailman/listinfo/spread-users
> >
> 
> _______________________________________________
> Spread-users mailing list
> Spread-users at lists.spread.org
> http://lists.spread.org/mailman/listinfo/spread-users
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SpreadConnection.java.patch
Type: application/octet-stream
Size: 1539 bytes
Desc: not available
Url : http://lists.spread.org/pipermail/spread-users/attachments/20050817/072d9125/attachment.obj 


More information about the Spread-users mailing list