Spring Boot WebSocket整合及nginx配置

一:Spring Boot WebSocket整合

创建一个maven项目,加入如下依赖

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>1.4.0.RELEASE</version>
			<scope>import</scope>
			<type>pom</type>
		</dependency>
	</dependencies>
</dependencyManagement>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-websocket</artifactId>
	</dependency>
</dependencies>
代码如下:

package com.wh.web;

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class CountWebSocketHandler extends TextWebSocketHandler {

	private static long count = 0;
	protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
		session.sendMessage(new TextMessage("你是第" + (++count) + "位访客"));
	}
}
package com.wh.web;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
public class WebsocketConfiguration implements WebSocketConfigurer {
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		registry.addHandler(new CountWebSocketHandler(), "/web/count");
	}
}
package com.wh.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.socket.config.annotation.EnableWebSocket;

@EnableWebSocket
@SpringBootApplication
public class ServerApp {
	public static void main(String[] args) {
		SpringApplication.run(ServerApp.class, args);
	}
}
application.properties 内容如下:

server.port=9080
spring.resources.static-locations=classpath:/webapp/html/
src/main/resources/webapp/html/index.html  内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>web socket</title>
</head>
<body>
<h1>web socket</h1>
<script type="text/javascript">
	var url = 'ws://'+window.location.hostname+':9080/web/count';
	var ws = new WebSocket(url);  
	ws.onopen = function(event)
    {  
        ws.send('hello');  
    };  
    
	ws.onmessage = function(event) {
		alert(event.data);
	};
	
	ws.onerror = function(event) {
		alert(event);
	}
</script>
</body>
</html>

最后,启动main方法,访问http://127.0.0.1:9080/index.html即可看到输出


二:nginx配置
nginx 通过在客户端和后端服务器之间建立起一条隧道来支持WebSocket。
为了使nginx可以将来自客户端的Upgrade请求发送给后端服务器,Upgrade和Connection的头信息必须被显式的设置。如下所示:

location /web/count {
	    proxy_pass http://tomcat-server;
	    proxy_redirect off;
	    proxy_http_version 1.1;
	    proxy_set_header Upgrade $http_upgrade;
	    proxy_set_header Connection "upgrade";
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;	
}

一旦我们完成以上设置,nginx就可以处理WebSocket连接了。

注意,必须要有  

proxy_set_header Host $host:$server_port;   

这个配置

否则,会报:

WebSocket connection to 'ws://192.168.1.104:9080/web/count' failed: Error during WebSocket handshake: Unexpected response code: 403

的错误

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot提供了对WebSocket的支持,可以通过反向代理来实现WebSocket的连接。 反向代理是一种服务器架构模式,它将客户端的请求转发到后端服务器,并将后端服务器的响应返回给客户端。在WebSocket中,反向代理可以用于将客户端的WebSocket请求转发到后端的WebSocket服务器。 要实现Spring Boot反向代理WebSocket,可以按照以下步骤进行操作: 1. 配置反向代理服务器:在反向代理服务器上配置WebSocket代理规则,将客户端的WebSocket请求转发到后端的WebSocket服务器。常见的反向代理服务器有Nginx和Apache等。 2. 配置Spring Boot应用:在Spring Boot应用中,需要添加WebSocket的依赖,并配置WebSocket相关的类和路由。 - 添加依赖:在`pom.xml`文件中添加`spring-boot-starter-websocket`依赖。 - 配置WebSocket类:创建一个继承自`WebSocketConfigurer`接口的类,并实现其中的方法。在`registerWebSocketHandlers`方法中,配置WebSocket处理器和路由。 - 配置WebSocket路由:在`registerWebSocketHandlers`方法中,使用`registry.addHandler()`方法配置WebSocket处理器和路由。可以指定处理器和路由的路径。 3. 配置反向代理规则:在反向代理服务器上配置WebSocket的反向代理规则,将客户端的WebSocket请求转发到Spring Boot应用的WebSocket处理器和路由。 以上是实现Spring Boot反向代理WebSocket的基本步骤。具体的配置和实现方式可以根据具体的需求和环境进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值