使用Glassfish+;Nginx+;Javascript

使用Glassfish+;Nginx+;Javascript,java,nginx,websocket,glassfish,jelastic,Java,Nginx,Websocket,Glassfish,Jelastic,我正在尝试在JavaEE中使用Websockets,在客户端使用Glassfish服务器和Javascript AngularJS,制作一个聊天应用程序。我正在使用Nginx代理连接 Nginx配置: location /ws/ { proxy_pass http://10.10.127.78:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade;

我正在尝试在JavaEE中使用Websockets,在客户端使用Glassfish服务器和Javascript AngularJS,制作一个聊天应用程序。我正在使用Nginx代理连接

Nginx配置:

location /ws/ {
        proxy_pass http://10.10.127.78:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
在Glassfish管理页面中,我启用了web套接字模式,并确保端口设置为8080

服务器端路径设置为:
@ServerEndpoint(value=“/ws/chat/{room}”)

好的,现在的问题是,我尝试连接到许多地址,每个地址都会出现一些问题:

  • 已尝试以localhost身份连接:
    var serviceLocation='ws://localhost:8080/ws/chat/all/'
    此处连接导致与“ws://localhost:8080/ws/chat/all/”的WebSocket连接失败:连接建立错误:net::ERR\u connection\u拒绝

  • 已尝试连接到服务器ip:
    var serviceLocation='ws://10.10.127.78:8080/ws/chat/'导致连接超时
    WebSocket连接到“ws://10.10.127.78:8080/ws/chat/all/”失败:连接建立错误:net::ERR_connection_TIMED_OUT

  • 已尝试连接到域:var serviceLocation='ws://test.domain.com:8080/ws/chat/';它导致404
    WebSocket连接到“ws://test.domain.com:8080/ws/chat/all/”失败:WebSocket握手时出错:意外响应代码:404

  • 不能让它工作。下一步我能试试什么?或者我做错了什么?如果您需要更多信息,请留言。谢谢,希望有人能帮忙

    我在Jelastic上托管所有这些环境

    更新:Javascript代码

    var wsocket;
    var serviceLocation = 'ws://localhost:8080/ws/chat/';
    //var serviceLocation = 'ws://10.10.127.78:8080/ws/chat/';
    var nickName = $rootScope.loggedUser.user.firstName + " " + 
            $rootScope.loggedUser.user.lastName;
    var room = 'all';
    var $chatWindow = $('#response');
    
    
    function onMessageReceived(evt) {
        var msg = JSON.parse(evt.data);
        var $appendedLine = $('<tr class="hidden-xs"><td>'+msg.received+' | '+msg.sender+'</td><td>'+msg.message+'</td></tr>\n\
                            <tr class="visible-xs"><td>'+msg.sender+': '+msg.message+'</td></tr>');
        $chatWindow.append($appendedLine);
    }
    
    function sendMessage() {
        var msg = '{"message":"' + $scope.message + '", "sender":"'
                        + nickName + '", "received":""}';
        wsocket.send(msg);
        $scope.message = "";
    }
    
    function connectToChatserver() {
        console.log(serviceLocation + room);
        wsocket = new WebSocket(serviceLocation + room);
        console.log("> ok");
        wsocket.onmessage = onMessageReceived;
        console.log("> connected to Web Socket server");
    }
    
    
    $scope.submitMessage = function() {
        sendMessage();
    };
    
    
    connectToChatserver();
    
    var-wsocket;
    var serviceLocation='ws://localhost:8080/ws/chat/';
    //var serviceLocation='ws://10.10.127.78:8080/ws/chat/';
    变量昵称=$rootScope.loggedUser.user.firstName+“”+
    $rootScope.loggedUser.user.lastName;
    变量室=‘全部’;
    var$chatWindow=$(“#响应”);
    函数onMessageReceived(evt){
    var msg=JSON.parse(evt.data);
    变量$appendedLine=$(''+msg.received+'|'+msg.sender+''+msg.message+'\n\
    “+msg.sender+”:“+msg.message+”;
    $chatWindow.append($appendedLine);
    }
    函数sendMessage(){
    var msg='{“message”:“+$scope.message+',“sender”:”
    +昵称“+”,“收到”:“}”;
    wsocket.send(msg);
    $scope.message=“”;
    }
    函数connectToChatserver(){
    控制台日志(服务位置+房间);
    wsocket=新的WebSocket(服务位置+房间);
    console.log(“>ok”);
    wsocket.onmessage=onMessageReceived;
    log(“>连接到Web套接字服务器”);
    }
    $scope.submitMessage=function(){
    sendMessage();
    };
    connectToChatserver();
    
    更新:本地测试


    我尝试将服务器镜像到本地机器,并在没有Nginx的情况下在本地对其进行测试,结果成功了。我是否错过了Nginx上的任何内容,这可能是问题的原因?验证了代理传递ip和端口,然后他们签出。

    好的,我发现了问题所在,希望与大家分享。问题是在glassfish 4.1和jdk 8服务器上构建的一个版本中,将jdk 7部署到glassfish 3.1.4服务器。Ofc由于jdk版本的原因出现问题,但由于服务器版本的差异,服务器没有引发任何版本异常问题,因此我没有看到问题的根源(忘记我是从jdk 8服务器构建的)。

    在我看来,第一个是正确的。根据其他错误(超时和404,这是HTTP未找到),看起来甚至找不到资源。尽管连接被拒绝,但似乎找到了资源,但存在一些错误配置,导致服务器拒绝连接。你试过在Chrome中使用JS runtime inspector之类的工具来添加断点并调试Javascript吗?嗨,迈克,谢谢你的提示,但是结果是空的。我用完整的Javascript代码更新了帖子,也许你可以发现一些我没有发现的东西。为了正确运行WebSockets,有必要向实例添加公共IP,我认为这对你应该有帮助。另外,您是否与主机提供商支持部门联系过?是的,我正在连接公共IP,是的,我联系了主机提供商支持部门,我们调试了几个小时。我们认为,这是由于Glassfish版本或网匣罐中的某些问题干扰了Glassfish特定版本的凝胶特性。我们仍在努力解决问题。