我正在尝试使用 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}")
。
好的,现在的问题是,我尝试连接到许多地址,每个地址都有一些问题:
尝试以本地主机身份连接:
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
尝试连接到服务器 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
尝试连接到域: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 和端口,然后他们签出。