SERVLET: Http Connection doesn't send data

J

jmackquack

I'm trying to write an application client/server with http protocol,
in JAVA. I need:

- client connects to the server,and after that,
- server continuously sends data to the client (as soon as they can be
obtained by an other server-side resource !! )

Client-side code is:

HttpURLConnectionis = httpConnection.getInputStream();

ObjectInputStream ois = new ObjectInputStream(is);
String toWrite=null;
do {
toWrite=(String)ois.readObject();
}
while(Thread.currentThread().isAlive());
is.close();

Server-side code (part of method doGet() of a servlet) is:

ObjectOutputStream os= new ObjectOutputStream
(response.getOutputStream());
Signal sig; // Signal is a Java Class containing String messages

int i=0;
while (i<10) {
sig = obs.getSignal(); // "obs" is a LinkedBlockingQueue!!!!
os.writeObject(new String(sig.getValue())); // sig.getValue()
returns String
}

The problem is that data sent from server arrives to client ALL at the
end of the while-cicle, and not one by one!

Istead, by using a code like this:

ObjectOutputStream os= new ObjectOutputStream
(response.getOutputStream());
int j=0;
while(true){
os.writeObject(new String("\n SERVER: count"+j));
j++;
}

....data arrives one by one!

I made lots of tries, variously modifying the code..and I noticed that
the problem is in using blocking methods
(in fact, the behaviour is same if forcing the current Thread to sleep
- eg Thread.sleep(1000) -).

Where's the problem??
 
G

Godofredo

I'm trying to write an application client/server with http protocol,
in JAVA. I need:

- client connects to the server,and after that,
- server continuously sends data to the client (as soon as they can be
obtained by an other server-side resource !! )

Client-side code is:

HttpURLConnectionis = httpConnection.getInputStream();

ObjectInputStream ois = new ObjectInputStream(is);
String toWrite=null;
do {
toWrite=(String)ois.readObject();
}
while(Thread.currentThread().isAlive());
is.close();

Server-side code (part of method doGet() of a servlet) is:

ObjectOutputStream os= new ObjectOutputStream
(response.getOutputStream());
Signal sig; // Signal is a Java Class containing String messages

int i=0;
while (i<10) {
sig = obs.getSignal(); // "obs" is a LinkedBlockingQueue!!!!
os.writeObject(new String(sig.getValue())); // sig.getValue()
returns String
}

The problem is that data sent from server arrives to client ALL at the
end of the while-cicle, and not one by one!

Istead, by using a code like this:

ObjectOutputStream os= new ObjectOutputStream
(response.getOutputStream());
int j=0;
while(true){
os.writeObject(new String("\n SERVER: count"+j));
j++;
}

...data arrives one by one!

I made lots of tries, variously modifying the code..and I noticed that
the problem is in using blocking methods
(in fact, the behaviour is same if forcing the current Thread to sleep
- eg Thread.sleep(1000) -).

Where's the problem??



Try os.flush();
Best wishes
Alex
 
E

EJP

do {
toWrite=(String)ois.readObject();
}
while(Thread.currentThread().isAlive());

That termination condition is crazy. The loop will nominally run
forever. It should terminate when EOFException is caught.
is.close();

This line of code is not reachable. If the current thread isn't alive
how can it execute this line of code?
The problem is that data sent from server arrives to client ALL at the
end of the while-cicle, and not one by one!

That's how HTTPResponse works unless you use chunked streaming mode,
because it has to assemble the entire response and set the
content-length header before sending the content.
(in fact, the behaviour is same if forcing the current Thread to sleep
- eg Thread.sleep(1000) -).

There's no reason why that would make any difference.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,431
Messages
2,571,677
Members
48,796
Latest member
Greg L.

Latest Threads

Top