4
回答
spring+websocket在本地局域网正常,部署到Linux上就连接不上了
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

最近才接触到 WebSocket,就照着网上的 demo 在本地使用 java实现了一个,主要使用 springmvc+spring4和tomcat 7来实现的。但是现在出现了一个很头疼的问题。我整个程序在本地(请求127.0.0.1)和局域网内都没有问题,可以正常建立连接并使用,但当我把程序部署到阿里云的Linux服务器的tomcat7上之后,就一直无法建立连接:

报错:Firefox 无法建立到 “ws://地址:端口/add/140/_isblal5/websocket” 服务器的连接。

         [HTTP/1.1 500 Internal Server Error 87ms]

我是新人菜鸟,希望前辈们多多指教,下面贴一下代码:

其实主要的就下面几个类,因为是实验demo,没做其他功能,其他的代码我就省略了,只贴主要的。

AppWebSocketConfig

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class AppWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

	@Override
	public void configureMessageBroker(MessageBrokerRegistry config) {
		config.enableSimpleBroker("/topic");
		config.setApplicationDestinationPrefixes("/calcApp");
	}

	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint("/add").withSockJS();
	}
}

WebSocketController

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class WebSocketController {

     @MessageMapping("/add" )
    @SendTo("/topic/showResult")
    public Result addNum(CalcInput input) throws Exception {
        Result result = new Result(); 
        return result;
    }
    
    @RequestMapping("/start")
    public String start() {
        return "start";
    }
}
前台 jsp 代码


主要的连接方法

<script src="resources/sockjs-0.3.4.js"></script>

<script src="resources/stomp.js"></script>

function connect() { var socket = new SockJS('/gkv_test/add'); stompClient = Stomp.over(socket); stompClient.connect({}, function(frame) { setConnected(true); console.log('Connected: ' + frame); stompClient.subscribe('/topic/showResult', function(calResult){ showResult(JSON.parse(calResult.body).result); }); }); }     function sendNum() {             //发送消息         stompClient.send("/calcApp/add", {}, JSON.stringify({ 'msg': msg}));      }     function showResult(message) {             var response = document.getElementById('calResponse');             var p = document.createElement('p');             p.style.wordWrap = 'break-word';             p.appendChild(document.createTextNode(message));             response.appendChild(p);     }


ps:不过我觉得,可能不是代码的问题,因为本地是没有问题的,但部署到服务器上就是连不上,而且阿里云的Linux服务器是没有预装一些东西的,很多都是我自己安装的,而且,这台服务器还有一个监听80端口的Apache2,我是新开了一个tomcat,监听8028端口。所以我想请教一下,是不是我部署的时候忽略了什么,还需要安装别的东西。

服务器是 阿里云 的 Linux,版本: version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

jdk:jdk-7u79-linux-x64.rpm

tomcat:apache-tomcat-7.0.63

先谢谢各位前辈帮忙


举报
碎流枫
发帖于3年前 4回/2K+阅
顶部