Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Websocket握手。从ws到wss_Javascript_Java_Ssl_Https_Websocket - Fatal编程技术网

Javascript Websocket握手。从ws到wss

Javascript Websocket握手。从ws到wss,javascript,java,ssl,https,websocket,Javascript,Java,Ssl,Https,Websocket,我开发一个应用已经有一段时间了,最近我在应用上附加了一个SSL证书(它不是自签名的;它是由Comodo签名的,所以从这里不会出现问题)。很久以前,我在Java Glassfish服务器上实现了一个WebSocket端点,并将其与javascript一起使用。我一直通过http成功地使用WebSocket,直到现在,当我转到https时 让我们看看我使用的代码片段: 服务器端点: @ServerEndpoint(value = "/ws/chat", encoders = ChatMes

我开发一个应用已经有一段时间了,最近我在应用上附加了一个SSL证书(它不是自签名的;它是由Comodo签名的,所以从这里不会出现问题)。很久以前,我在Java Glassfish服务器上实现了一个WebSocket端点,并将其与javascript一起使用。我一直通过http成功地使用WebSocket,直到现在,当我转到https时

让我们看看我使用的代码片段:

服务器端点:

@ServerEndpoint(value = "/ws/chat", 
    encoders = ChatMessageEncoder.class, 
    decoders = ChatMessageDecoder.class)
public class ChatEndpoint {

@OnOpen
public void open(final Session session) {
    // stuff happenin'
}

@OnMessage
public void onMessage(final Session session) {
    // stuff happenin'    }

@OnError
public void onError(Throwable t) {
    t.printStackTrace();
    System.out.println("error");
}

@OnClose
public void onClose() {
}
}
客户端连接:

var wsocketPrivate;
function connectToChatserver() {
    var serviceLocation = 'wss://<ip>:8080/ws/chat';
    $rootScope.wsocketPrivate = new WebSocket(serviceLocation);
    $rootScope.wsocketPrivate.onmessage = onMessageReceived;
};
function onMessageReceived(evt) {
    console.log(evt)
};
connectToChatserver();
var wsocketPrivate;
函数connectToChatserver(){
var serviceLocation='wss://:8080/ws/chat';
$rootScope.wsocketPrivate=新的WebSocket(serviceLocation);
$rootScope.wsocketPrivate.onmessage=onMessageReceived;
};
函数onMessageReceived(evt){
控制台日志(evt)
};
connectToChatserver();
未激活ssl证书并使用
var serviceLocation='ws://:8080/ws/chat'(ws而不是wss)工作得非常好。当我移动到https时,它请求wss(浏览器阻止了我的ws-handshake,因为它不安全),然后移动到wss时,出现以下错误:

WebSocket connection to 'wss://<ip>:8080/ws/chat' failed: Error in connection establishment: net::ERR_TIMED_OUT
WebSocket连接到'wss://:8080/ws/chat'失败:连接建立中出错:net::ERR\u超时
我做错了什么?你能推荐一些测试来了解更多信息吗

谢谢,,
米海

我终于找到了问题所在。我使用了一个nginx前端服务器作为代理。由于某种奇怪的原因,该服务器的默认配置阻止了我的wss。

您解决了这个问题吗??我有点陷入了这个困境是的,检查答案。我也面临着同样的问题,你能告诉我你在nginx服务器配置文件中添加了什么额外的配置吗?如果我能让Tyrus以编程方式执行SSL,我可以预见我也会遇到这个问题。配置有什么变化?