嵌入式 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)。
是否可以将所有 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)。