This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Basic version | |
* @author johne | |
* | |
*/ | |
@WebServlet(urlPatterns = "/Weather/v1", asyncSupported = true) | |
public class WeatherDataStream extends HttpServlet { | |
private static final long serialVersionUID = 1L; | |
// Keeps all open connections from browsers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<body> | |
<h3>Climate Temperature Toolbox</h3> | |
<input type="button" value="start" id="start" /> | |
Send Weather Data for your home city: | |
<br /><br /> | |
City: <input type="text" id="home-city" /> | |
Celsius: <input type="text" id="home-temperature" /> | |
<input type="button" value="send" id="send" /> | |
<br /> | |
Weather Data from other cities: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// tell the browser if connection | |
// fails to reopen it after 10 seconds | |
response.getWriter().println("retry: 10000\n"); | |
// Start asynchronous context and add listeners to remove it in case | |
// of errors | |
final AsyncContext ac = request.startAsync(); | |
log("Default timeout for this asyncContext: "+ac.getTimeout()); | |
// The timeout will expire if neither the complete() method nor any of the dispatch methods are called on the | |
// asyncContext. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<body> | |
<h3>Climate Temperature Toolbox</h3> | |
<input type="button" value="start" id="start" /> | |
<input type="button" value="stop" id="stop" /> | |
Send Weather Data for your home city: | |
<br /><br /> | |
City: <input type="text" id="home-city" /> | |
Celsius: <input type="text" id="home-temperature" /> | |
<input type="button" value="send" id="send" /> | |
<br /> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private AtomicInteger counter = new AtomicInteger(1); | |
private boolean sendMessage(PrintWriter writer, WeatherToken token) { | |
writer.print("id: "); | |
writer.println(counter.getAndIncrement()); | |
writer.println("event: city"); | |
writer.print("data: "); | |
writer.println(token.getType()+":"+token.getData()); | |
writer.println(); //new line marks an event boundary | |
return writer.checkError(); //checkError() calls writer.flush(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@WebServlet(urlPatterns = "/Weather/v4", asyncSupported = true) | |
public class WeatherDataStream extends HttpServlet { | |
private static final long serialVersionUID = 1L; | |
// Keeps all open connections from browsers | |
private Set<AsyncContext> asyncContexts = new HashSet<AsyncContext>(); | |
// Temporary store for messages when arrived | |
private Queue<WeatherToken> tokenQueue = new CircularFifoQueue<WeatherToken>(5); | |
private AtomicInteger counter = new AtomicInteger(1); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package testex; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.concurrent.ArrayBlockingQueue; | |
import java.util.concurrent.Callable; | |
import java.util.concurrent.ExecutorService; | |
import java.util.concurrent.RejectedExecutionHandler; | |
import java.util.concurrent.ThreadPoolExecutor; | |
import java.util.concurrent.TimeUnit; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package testex; | |
/** | |
* Notice the difference between daemon (background) threads and non-daemon (user) threads | |
* - Finally blocks are not executed for daemon threads | |
* - JVM is concerned about user threads only | |
* - JVM exits when all user threads are completed in other words JVM waits for user threads to run to completion | |
* - JVM doesn't wait for daemon threads - simply kills it when JVM is ready to exit (or killed by user action) | |
* - If any clean up needs to be done for daemon threads (works for user threads also) put them as a shutdown hook | |
* @author johne |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package async; | |
import java.io.IOException; | |
import javax.servlet.AsyncContext; | |
import javax.servlet.ServletException; | |
import javax.servlet.annotation.WebServlet; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package async; | |
import java.io.IOException; | |
import javax.servlet.ServletException; | |
import javax.servlet.annotation.WebServlet; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; |
OlderNewer