Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (408)
games submitted by our members
Games in WIP (293)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Does NIO coalesce reads?  (Read 1802 times)
0 Members and 1 Guest are viewing this topic.
Offline leknor

Junior Member




ROCK!!!


« Posted 2003-02-13 17:18:16 »

My code currently works when I use it but I think I'm making some assumptions that may not hold true under heady load.

I have a bunch of java.nio.channels.DatagramChannel's which I've setup so I can send/receive UDP packets. I then register them with a Selector and wait for input.  That so far seems to work.

My potential problem is with the channel.read(ByteBuffer) method. If two packets have been received on a channel before I can read them will the next read(ByteBuffer) operation read them both or will I need to read the channel twice? Personally I'm hoping for the latter but increasingly I'm feelling like the former is the actuall behavior.
Offline Herkules

Senior Member




Friendly fire isn't friendly!


« Reply #1 - Posted 2003-02-14 11:05:28 »

I hvae no idea of UDP, but for TCP definately messages sent and data read have nothing in common - it is just  a bytestream and any number of bytes might be read.  From zero up to serveral messages at once, also only parts of messages.

But I assume that is the nature of TCP and for UDP I'd expect the behavior you hope for.

HARDCODE    --     DRTS/FlyingGuns/JPilot/JXInput  --    skype me: joerg.plewe
Offline leknor

Junior Member




ROCK!!!


« Reply #2 - Posted 2003-02-14 18:11:02 »

I asked the author of the Java NIO book and here is his reply:

Quote
Datagrams are chunky.

There are basically two types of network connections: streams (TCP) and datagrams (UDP).  TCP streams (as modeled by SocketChannel objects) function like a pipe where everything blends together into a continuous stream.

Datagrams (as modeled by the DatagramChannel class) are independent chunks.  No datagram has any relationship to any other.  The metaphor that best applies is letters in a mailbox. Each has a data payload but there is no notion of order or relationship.  Datagrams could be sent in the order A, B, C
but arrive at the destination in the order B, C, A.

So, the answer to your question is "no".  It's one read per datagram and they will never mix together.  One gotcha to think about is that if the ByteBuffer you're reading into is not big enough to hold the entire datagram, the excess data will be silently discarded.

... which is what I wanted to hear.  Grin
Games published by our own members! Check 'em out!
Try the Free Demo of Droid Assault
Offline gregorypierce

Senior Member




I come upon thee like the blue screen of death....


« Reply #3 - Posted 2003-03-11 00:55:07 »

If that's the case I've definitely got a bug to report in NIO for JDK1.4.1_02 as on occasion I've seen several messages come in at the same time all concatenated together using TCP or UDP. Caused me MUCH headache.

http://www.gregorypierce.com

She builds, she builds oh man
When she links, she links I go crazy
Cause she looks like good code but she's really a hack
I think I'll run upstairs and grab a snack!
Offline leknor

Junior Member




ROCK!!!


« Reply #4 - Posted 2003-03-11 02:40:44 »

TCP should be coalesed.

How'd you verify that UDP is being coalesed? Are you sure it's the JVM or could it be a buggy network driver somewhere. If you need to do some packet sniffing try: http://ethereal.com/ , that's what I use for both linux and windows.
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Get high quality music tracks for your game!

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (105 views)
2013-05-17 21:29:12

alaslipknot (114 views)
2013-05-16 21:24:48

gouessej (142 views)
2013-05-16 00:53:38

gouessej (138 views)
2013-05-16 00:17:58

theagentd (150 views)
2013-05-15 15:01:13

theagentd (135 views)
2013-05-15 15:00:54

StreetDoggy (178 views)
2013-05-14 15:56:26

kutucuk (201 views)
2013-05-12 17:10:36

kutucuk (202 views)
2013-05-12 15:36:09

UnluckyDevil (208 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.085 seconds with 20 queries.