只是想知道是否有人使用嵌入式Jetty试验过WebSocket代理(透明代理)?
在使用Jetty 9.1.2.v20140210大约一天半之后,我所能说的是它无法以当前形式代理WebSockets,并且添加此类支持是非常重要的任务(至少是afaict).
基本上,Jetty ProxyServlet剥离了"Upgrade"和"Connection"头字段,无论它是否来自WebSocket握手请求.将这些字段添加回来很容易,如下所示.但是,当代理服务器返回带有HTTP代码101(切换协议)的响应时,代理服务器上不会进行协议升级.因此,当第一个WebSocket数据包到达时,HttpParser会扼杀并将其视为错误的HTTP请求.
如果有人已经有解决方案或熟悉Jetty建议尝试什么,那将非常感激.
下面是我的实验中删除不重要位的代码:
public class ProxyServer
{
public static void main(String[] args) throws Exception
{
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(8888);
server.addConnector(connector);
// Setup proxy handler to handle CONNECT methods
ConnectHandler proxy = new ConnectHandler();
server.setHandler(proxy);
// Setup proxy servlet
ServletContextHandler context = new ServletContextHandler(proxy, "/", ServletContextHandler.SESSIONS);
ServletHolder proxyServlet = new ServletHolder(MyProxyServlet.class);
context.addServlet(proxyServlet, "/*");
server.start();
}
}
@SuppressWarnings("serial")
public class MyProxyServlet extends ProxyServlet
{
@Override
protected void customizeProxyRequest(Request proxyRequest, HttpServletRequest request) …Run Code Online (Sandbox Code Playgroud)