Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support websocket handlers on dynamic endpoints #15

Open
danneu opened this issue Feb 5, 2017 · 1 comment
Open

Support websocket handlers on dynamic endpoints #15

danneu opened this issue Feb 5, 2017 · 1 comment

Comments

@danneu
Copy link
Owner

danneu commented Feb 5, 2017

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.
@danneu
Copy link
Owner Author

danneu commented Feb 6, 2017

I'm thinking of removing the current websocket system (and the mess/hack in Server.kt) and replacing it with a simpler system where you just create a jetty websockethander and mount it separately from the req/res system.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant