Websocket 使用 Glassfish + Nginx + Javascript

Websocket using Glassfish + Nginx + Javascript

我正在尝试使用 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 管理页面中,我启用了网络套接字模式,并确保端口设置为 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/';结果是 404 WebSocket 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 和端口,他们检查了。

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