users@grizzly.java.net

Re: WebSocket server with Grizzly (was Re: WebSocket clinet with Grizzly)

From: Ryan Lubke <ryan.lubke_at_oracle.com>
Date: Thu, 23 May 2013 11:15:45 -0700

Correct. You can configure the WebSocketFilter timeout via the
WebSocketAddon:

final WebSocketAddon addon = new WebSocketAddon();
addon.setTimeoutInSeconds(...);

Then register the addon with the network listener.

> Weiqi Gao <mailto:weiqigao_at_gmail.com>
> May 23, 2013 5:29 AM
> Hi,
>
> Just to follow up. It seems that the there is a 15 minutes timeout
> for WebSockets on the server side as well. I'm running my own
> WebSocketApplication (I'm using grizzly-http-server-2.2.21.jar and
> friends, and I'm using code very similar to the example in the
> WebSocket chapter of the documentation), accepted a connection from
> the client. After 15 minutes, the onClose() call back is called from
> a thread named "HttpServer-0" with the following stack trace.
>
> I'd appreciate it if someone can let me know how to turn off this
> timeout off as well.
>
> at foo.MyWebSocketApplication.onClose(MyWebSocketApplication.java:68)
> at
> org.glassfish.grizzly.websockets.DefaultWebSocket.onClose(DefaultWebSocket.java:128)
> at
> org.glassfish.grizzly.websockets.ProtocolHandler$1.failed(ProtocolHandler.java:163)
> at
> org.glassfish.grizzly.websockets.ProtocolHandler$2.failed(ProtocolHandler.java:199)
> at
> org.glassfish.grizzly.asyncqueue.AsyncQueueRecord.notifyFailure(AsyncQueueRecord.java:108)
> at
> org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.onWriteFailure(AbstractNIOAsyncQueueWriter.java:573)
> at
> org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.writeQueueRecord(AbstractNIOAsyncQueueWriter.java:233)
> at
> org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:219)
> at
> org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:127)
> at
> org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)
> at
> org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
> at
> org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.write(DefaultFilterChain.java:390)
> at
> org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:397)
> at
> org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:380)
> at
> org.glassfish.grizzly.websockets.ProtocolHandler.write(ProtocolHandler.java:186)
> at
> org.glassfish.grizzly.websockets.ProtocolHandler.send(ProtocolHandler.java:91)
> at
> org.glassfish.grizzly.websockets.ProtocolHandler.close(ProtocolHandler.java:158)
> at
> org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:192)
> at
> org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:183)
> at
> org.glassfish.grizzly.websockets.WebSocketFilter.handleClose(WebSocketFilter.java:156)
> at
> org.glassfish.grizzly.filterchain.ExecutorResolver$4.execute(ExecutorResolver.java:76)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
> at
> org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
> at
> org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:770)
> at
> org.glassfish.grizzly.nio.NIOConnection.preClose(NIOConnection.java:702)
> at
> org.glassfish.grizzly.nio.transport.TCPNIOConnection.preClose(TCPNIOConnection.java:96)
> at
> org.glassfish.grizzly.nio.NIOConnection.close0(NIOConnection.java:435)
> at
> org.glassfish.grizzly.nio.transport.TCPNIOConnection.close0(TCPNIOConnection.java:244)
> at
> org.glassfish.grizzly.nio.NIOConnection.close(NIOConnection.java:419)
> at
> org.glassfish.grizzly.nio.NIOConnection.closeSilently(NIOConnection.java:425)
> at
> org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:387)
> at
> org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
> at
> org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:722)]
>
>
> On 5/2/2013 4:55 PM, Ryan Lubke wrote:
>
> Ryan Lubke <mailto:ryan.lubke_at_oracle.com>
> May 2, 2013 2:55 PM
>
>
>> Weiqi Gao <mailto:weiqigao_at_gmail.com>
>> May 2, 2013 2:30 PM
>> Hi,
>>
>> I'm not sure if this is the right mailing list for the question. I
>> subscribed for a few weeks ago but didn't see too much traffic. But I
>> saw Ryan Lubke's post yesterday. So I thought I'll ask the question
>> here and if there is a better place where Grizzly related discussions
>> are happening, please point me to that location.
>>
>> I'm trying to write a WebSocket client that establishes permanent
>> secure (wss://) connections to a WebSocket server using the Grizzly
>> framework.
>>
>> I have several meta-questions and a real question:
>>
>> Meta-Q1: The WebSockets chapter of the Grizzly documentation points
>> me to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on
>> the Grizzly Side of Things…"
>> (http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/).
>> It was written in January 2012. Is it still current?
> Yes.
>>
>> Meta-Q2: The blog entry points to the Maven dependency:
>>
>> <dependency>
>> <groupId>org.glassfish.grizzly</groupId>
>> <artifactId>grizzly-http-client</artifactId>
>> <version>1.0</version>
>> </dependency>
>>
>> I saw that version 1.3 of the same package is available at Maven
>> Central. I assume it is OK to use 1.3. Am I right?
> Yes.
>>
>> Meta-Q3: Why is grizzly-http-client not versioned like the rest of
>> the Grizzly components? Is it somehow less of an integral part of the
>> Grizzly framework?
> I wanted to keep it separate as the Async HTTP Client release schedule
> differs from ours. It wouldn't make sense to release a new version
> when nothing changed.
>>
>> Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from
>> Maven Central contains only one Java source file, that of
>> org/glassfish/grizzly/http/clientVersion.java. Where can I get the
>> rest of the sources from Maven Central?
> I would recommend getting the source bundle for Async HTTP Client 1.7.6.
>>
>> Q1: I create the WebSocket using the following code:
>>
>> AsyncHttpClientConfig asyncHttpClientConfig =
>> new AsyncHttpClientConfig.Builder()
>> .setSSLContext(MySSLUtil.createSSLContext())
>> .build();
>> AsyncHttpClient asyncHttpClient =
>> new AsyncHttpClient(new
>> GrizzlyAsyncHttpProvider(asyncHttpClientConfig), asyncHttpClientConfig);
>> WebSocketListener webSocketListener = new DefaultWebSocketListener() {
>> // my processing
>> };
>> WebSocketUpgradeHandler handler =
>> new WebSocketUpgradeHandler.Builder()
>> .addWebSocketListener(webSocketListener)
>> .build();
>> String wsUrl = "wss://localhost/context";
>> WebSocket webSocket =
>> asyncHttpClient.prepareGet(wsUrl).execute(handler).get();
>>
>> It successfully connects to the server and establishes the
>> connection, over which the client was able to exchange data with the
>> server. However, after a minute or so, the IdleTimeoutFilter that was
>> instantiated here
>>
>> <init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
>> initializeTransport():346, GrizzlyAsyncHttpProvider
>> {com.ning.http.client.providers.grizzly}
>> <init>():176, GrizzlyAsyncHttpProvider
>> {com.ning.http.client.providers.grizzly}
>>
>> would fire and eventually close the WebSocket connection:
>>
>> java.util.concurrent.TimeoutException: Timeout exceeded
>> at
>> com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
>>
>> at
>> com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
>>
>> at
>> org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
>>
>> at
>> org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
>>
>> at
>> org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
>>
>> at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>
>> at java.lang.Thread.run(Thread.java:722)
>>
>> What is the best way to get around my problem?
> Set AsyncHttpClientConfig's requestTimeoutInMs property to -1.
>
> Would also request logging an issue. The logic should be disabling
> the timeout for ws connections.
>>
>> TIA,
>> --
>> Weiqi Gao
>> weiqigao_at_gmail.com
>> http://weiqigao.blogspot.com/
> Weiqi Gao <mailto:weiqigao_at_gmail.com>
> May 2, 2013 2:30 PM
> Hi,
>
> I'm not sure if this is the right mailing list for the question. I
> subscribed for a few weeks ago but didn't see too much traffic. But I
> saw Ryan Lubke's post yesterday. So I thought I'll ask the question
> here and if there is a better place where Grizzly related discussions
> are happening, please point me to that location.
>
> I'm trying to write a WebSocket client that establishes permanent
> secure (wss://) connections to a WebSocket server using the Grizzly
> framework.
>
> I have several meta-questions and a real question:
>
> Meta-Q1: The WebSockets chapter of the Grizzly documentation points me
> to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on the
> Grizzly Side of Things…"
> (http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/).
> It was written in January 2012. Is it still current?
>
> Meta-Q2: The blog entry points to the Maven dependency:
>
> <dependency>
> <groupId>org.glassfish.grizzly</groupId>
> <artifactId>grizzly-http-client</artifactId>
> <version>1.0</version>
> </dependency>
>
> I saw that version 1.3 of the same package is available at Maven
> Central. I assume it is OK to use 1.3. Am I right?
>
> Meta-Q3: Why is grizzly-http-client not versioned like the rest of the
> Grizzly components? Is it somehow less of an integral part of the
> Grizzly framework?
>
> Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from Maven
> Central contains only one Java source file, that of
> org/glassfish/grizzly/http/clientVersion.java. Where can I get the
> rest of the sources from Maven Central?
>
> Q1: I create the WebSocket using the following code:
>
> AsyncHttpClientConfig asyncHttpClientConfig =
> new AsyncHttpClientConfig.Builder()
> .setSSLContext(MySSLUtil.createSSLContext())
> .build();
> AsyncHttpClient asyncHttpClient =
> new AsyncHttpClient(new
> GrizzlyAsyncHttpProvider(asyncHttpClientConfig), asyncHttpClientConfig);
> WebSocketListener webSocketListener = new DefaultWebSocketListener() {
> // my processing
> };
> WebSocketUpgradeHandler handler =
> new WebSocketUpgradeHandler.Builder()
> .addWebSocketListener(webSocketListener)
> .build();
> String wsUrl = "wss://localhost/context";
> WebSocket webSocket =
> asyncHttpClient.prepareGet(wsUrl).execute(handler).get();
>
> It successfully connects to the server and establishes the connection,
> over which the client was able to exchange data with the server.
> However, after a minute or so, the IdleTimeoutFilter that was
> instantiated here
>
> <init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
> initializeTransport():346, GrizzlyAsyncHttpProvider
> {com.ning.http.client.providers.grizzly}
> <init>():176, GrizzlyAsyncHttpProvider
> {com.ning.http.client.providers.grizzly}
>
> would fire and eventually close the WebSocket connection:
>
> java.util.concurrent.TimeoutException: Timeout exceeded
> at
> com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
>
> at
> com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
>
> at
> org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
>
> at
> org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
>
> at
> org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
>
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>
> at java.lang.Thread.run(Thread.java:722)
>
> What is the best way to get around my problem?
>
> TIA,
> --
> Weiqi Gao
> weiqigao_at_gmail.com
> http://weiqigao.blogspot.com/