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}")
。
好的,现在的问题是,我尝试连接到许多地址,但每个地址都出现问题:
尝试以本地主机身份连接: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 和端口,他们检查了。
好的,我发现哪里出了问题,我想分享一下。问题是从具有 jdk 8 服务器的 glassfish 4.1 上构建的 jdk 7 部署到 glassfish 3.1.4 服务器。 Ofc 问题是因为 jdk 版本,但由于服务器版本差异,服务器没有抛出任何版本异常问题所以我没有看到问题来自哪里(忘了我是从一个 jdk 8 个服务器)。
我正在尝试使用 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}")
。
好的,现在的问题是,我尝试连接到许多地址,但每个地址都出现问题:
尝试以本地主机身份连接:
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 和端口,他们检查了。
好的,我发现哪里出了问题,我想分享一下。问题是从具有 jdk 8 服务器的 glassfish 4.1 上构建的 jdk 7 部署到 glassfish 3.1.4 服务器。 Ofc 问题是因为 jdk 版本,但由于服务器版本差异,服务器没有抛出任何版本异常问题所以我没有看到问题来自哪里(忘了我是从一个 jdk 8 个服务器)。