使用Glassfish+;Nginx+;Javascript
我正在尝试在JavaEE中使用Websockets,在客户端使用Glassfish服务器和Javascript AngularJS,制作一个聊天应用程序。我正在使用Nginx代理连接 Nginx配置:使用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;
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/'
此处连接导致与“ws://localhost:8080/ws/chat/all/”的WebSocket连接失败:连接建立错误:net::ERR\u connection\u拒绝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
WebSocket连接到“ws://test.domain.com:8080/ws/chat/all/”失败:WebSocket握手时出错:意外响应代码:404
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特定版本的凝胶特性。我们仍在努力解决问题。