1

我正在尝试使用 Glassfish 服务器和 Javascript AngularJS 为客户端使用 JavaEE 中的 Websockets 制作聊天应用程序。我正在使用 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}")

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

  1. 尝试以本地主机身份连接:var serviceLocation = 'ws://localhost:8080/ws/chat/all/';这里的连接结果是WebSocket connection to 'ws://localhost:8080/ws/chat/all/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

  2. 尝试连接到服务器 ip:var serviceLocation = 'ws://10.10.127.78:8080/ws/chat/';导致连接超时WebSocket connection to 'ws://10.10.127.78:8080/ws/chat/all/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

  3. 尝试连接到域:var serviceLocation = 'ws://test.domain.com:8080/ws/chat/'; 结果是404WebSocket connection to 'ws://test.domain.com:8080/ws/chat/all/' failed: Error during WebSocket handshake: Unexpected response code: 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();

更新:本地测试

我尝试将服务器镜像到本地机器并在没有 Nginx 的情况下在本地测试它并且它工作。我是否错过了 Nginx 上的任何内容,这可能是问题的原因?验证代理通过 ip 和端口,然后他们签出。

4

1 回答 1

1

好的,我发现了问题所在,我想分享一下。问题是从带有 jdk 8 服务器的 glassfish 4.1 上构建的构建到带有 jdk 7 的 glassfish 3.1.4 服务器的部署。ofc问题是因为jdk版本出现的,但是由于服务器版本不同,服务器没有抛出任何版本异常问题所以我没有看到问题出在哪里(忘了我是从jdk 8服务器构建的)。

于 2015-04-20T21:11:09.023 回答