Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] jetty 11 replacement for WebsocketHandler

I think there should be a getConfiguration() method on the WebSocketUpgrade handler, but it looks like it is missing.

You can also set configuration like IdleTimeout from the WebSocketNegotiator, or from the CoreSession once the websocket connection is opened.

```
WebSocketNegotiator.AbstractNegotiator negotiator = new WebSocketNegotiator.AbstractNegotiator()
{
    @Override
    public FrameHandler negotiate(WebSocketNegotiation negotiation) throws IOException
    {
        return new EchoFrameHandler();
    }
};
negotiator.setIdleTimeout(Duration.ofSeconds(30));
upgradeHandler.addMapping("/", negotiator);
```

Using this code you can set configuration per WebSocketNegotiator but it must be done for each one you add.

I will open a PR to allow access to the ConfigurationCustomizer of the WebSocketUpgradeHandler.

cheers,
Lachlan

On Wed, Aug 17, 2022 at 8:09 PM Matthias Pfau via jetty-users <jetty-users@xxxxxxxxxxx> wrote:
Thanks Joakim, that helped a lot! 

Websockets are working for us now. The only remaining problem is setting the idle timeout.

With 9.4 we just set it on the WebsocketPolicy in a custom class which overrode WebsocketHandler#configure.

With 11 I noted that WebSocketUpgradeHandler instantiates a ConfigurationCustomizer which allows setting the idle timeout. However, that one is not accessible.

How are you expected to set the IdleTimeout when you use the WebSocketUpgradeHandler?

Thanks!

Best,
Matthias

Aug 15, 2022, 18:08 by joakim@xxxxxxxxxxx:

> You can use the org.eclipse.jetty.websocket.core.server.WebSocketUpgradeHandler.
>
> That is a HandlerWrapper with mappings.
> You don't extend from that class, you configure it, and set it up as a wrapper in your Server handler tree.
>
> Note that this is a websocket-core concept, so it's not jakarta.websocket or jetty.websocket (both of which require Servlet stuff)
>
> For an example, see ...
>
> https://github.com/eclipse/jetty.project/blob/jetty-11.0.x/jetty-websocket/websocket-core-tests/src/test/java/org/eclipse/jetty/websocket/core/chat/ChatWebSocketServer.java
>
> Joakim Erdfelt / > joakim@xxxxxxxxxxx
>
>
> On Mon, Aug 15, 2022 at 10:34 AM Matthias Pfau via jetty-users <> jetty-users@xxxxxxxxxxx> > wrote:
>
>> Hi there,
>>  we are currently upgrading to jetty 11. With jetty 9, we were only using handlers and no servlets at all. That is why we used the WebsocketHandler to do a programmatic upgrade. 
>> 
>>  There is an example on how to do a programmatic upgrade in the docs (ProgrammaticWebSocketUpgradeServlet). However, it seems like you need to pass a ServletContext to JettyWebSocketServerContainer#getContainer. We don't have one, so we can't obtain a reference to the JettyWebSocketServerContainer (servletContext on baseRequest passed to handlers is null).
>>  Do we need to use Servlets/ServletContext now? Or is there a way to stick to handlers?
>> 
>>  Best,
>>  Matthias
>> 
>>  Reference to doc: >> https://www.eclipse.org/jetty/documentation/jetty-11/programming-guide/index.html#pg-server-websocket-jetty
>>  _______________________________________________
>>  jetty-users mailing list
>>  >> jetty-users@xxxxxxxxxxx
>>  To unsubscribe from this list, visit >> https://www.eclipse.org/mailman/listinfo/jetty-users
>>

_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users

Back to the top