-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
Right now, returning Response.websocket("/foo/bar", wshandler) from a handler will add the "/foo/bar" -> wshandler mapping to Jetty's context mappings, so it must be a static path.
So, to mount a websocket handler on /users/<name>, you must do something like this:
val router = Router {
get("/users/<name>", fun(name: String): Handler = {
Response.websocket("/users/$name", /* websocket handler */)
})
}This means that a mapping could be added to Jetty's table for all possible values of /users/<name>.
Even if you ensure Response.websocket() only runs if, say, a user with the given name exists in the database, that's still pretty suboptimal.
The problem is my websocket Jetty code in general. It's a pretty big hack, but I'm not familiar enough with Jetty's API to improve it just yet.
Some objectives that drove my current approach that I want to maintain:
- End-user should be able to wrap a websocket endpoint behind existing middleware stacks, like inside a group or router that ensures that the user is an admin.
- The websocket handler should access upstream context (like values set by upstream middleware) and the
kog.Request.
Metadata
Metadata
Assignees
Labels
No labels