嵌入式 Jetty 9 - 我需要 Websocket 服务器、REST Servlet 和文件服务器

Embedded Jetty 9 - I need Websocket Server, REST Servlet, and File Server

是否可以将所有 3 个(Websocket、REST Servlet 和文件服务器)都放在同一个端口上?

我一直在网上寻找许多部分解决方案的示例,但 Jetty 设置有太多变体,很难确定什么适合我。

我更愿意使用 JSR-356 websocket api 而不是专有的 Jetty,以防我以后必须移动到不同的服务器。

是的,如果 HTTP 路径不同,则最简单。

  • /ws/*
  • 上的 WebSocket
  • 休息 /api/*
  • /static/*(或 / 上的静态文件服务,这意味着所有不以 /ws//api/ 开头的请求)

但是如果你不想使用路径,那么你必须使用一些其他的请求分隔符。

  • WebSocket 升级是一个带有 Connection: upgrade 的 GET,因此不会与 REST 或文件服务发生冲突。
  • 如果路径重叠,REST 很容易与文件服务发生冲突。 (如果客户端要求 /stuff/here 并且您在 /* 上设置了 REST,那么该请求是什么意思?REST 还是静态文件?)
  • 文件服务传统上由 / 的 servlet 规范默认 url-模式处理,这意味着如果没有指定其他 url-模式来处理请求的 HTTP 路径, 然后提供静态文件。

这是建议:

  • 不要重叠您的 url 模式。
  • 为每个使用单独的路径。 (你以后会感谢自己的)
  • 不要让 REST 为静态文件提供服务(这是非常低效的,充其量只是一种 hack)。