最近才接触到 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
先谢谢各位前辈帮忙
同求,遇到了相同问题端口没开放
同求,遇到了相同问题,解决了没有?
同求,遇到了相同问题,解决了没有?
同求,请问怎么解决的
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。