【发布时间】:2016-12-22 19:38:56
【问题描述】:
这是一个很常见的问题,但我找不到针对我的具体情况的解决方案。我正在使用 Glassfish 4.1.1,我的应用程序实现了 Websockets。
在客户端,我通过以下方式连接到 WS-server:
var serviceLocation = "ws://" + window.location.host + window.location.pathname + "dialog/";
var wsocket = new WebSocket(serviceLocation + token_var);
在服务器端 websocket 是通过 @ServerEndpoint 功能实现的,看起来很常见:
@ServerEndpoint(value = "/dialog/{token}", decoders = DialogMessageDecoder.class)
public class DialogWebsoketEndpoint {
@OnOpen
public void open(final Session session, @PathParam("token") final String token) { ... }
etc.
}
在客户尝试通过代理连接之前,一切正常。 使用此测试:http://websocketstest.com/ 我发现客户的计算机在 http-proxy 1.1 之后工作。 他无法连接到 websockets,onopen 根本不会触发。 wsoscket.readyState 永远不会变成 1。
如何调整我的 ServerEndpoint 以使此代码即使在客户通过代理连接时也能正常工作?
提前谢谢你!
更新:我会在该计算机上提供带有 websocketstest 的屏幕截图:
在我的电脑上,除了一件事之外,它看起来很相似: HTTP 代理:否。
【问题讨论】:
-
希望this link能帮到你
-
我不想成为坏消息的承担者,但很可能是代理服务器本身不能正确支持 websockets。您无法将其编程掉,除非使用 Socket.IO 提供的轮询回退机制。
-
Gimby,感谢您的回答,但websocketstest.com 表明握手(和回声测试)通过 ssl 443 端口成功。所以我认为 websockets 可以与该代理服务器一起使用。
-
@Sanjeev,我想在我的情况下不需要设置凭据。因为我的网络没有任何代理。只有客户端计算机在代理后面工作。 (如果我误解了,请纠正我)
-
@Luxor 如果您的客户端使用代理连接到外部世界,并且该代理服务器在连接到您的服务器时也会被使用,那么是的,他们需要使用这些设置
标签: javascript java proxy websocket glassfish