效果图:
在上一篇阻塞式不太适合大场景,所以采用广播式对群进行分组,一个主题代表一个群
代码如下:
集成redis
server.port=8080
spring.thymeleaf.cache=false
redis.host=127.0.0.1
## Redis服务器连接端口
redis.port=6379
## 连接超时时间(毫秒)
## Redis服务器连接密码(默认为空)
redis.password=
## 连接池中的最大连接数
redis.poolMaxTotal=10
## 连接池中的最大空闲连接
redis.poolMaxIdle=10
## 连接池最大阻塞等待时间(使用负值表示没有限制)
redis.poolMaxWait=3
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
@Configuration
public class RedisConfig {
@Autowired
private JedisConnectionFactory jedisConnectionFactory;
/**
* @author 描述:需要手动注册RedisMessageListenerContainer加入IOC容器
* @return
*/
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer() {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(jedisConnectionFactory);
return container;
}
}
控制层
@Controller
@RequestMapping("/websocket")
public class WebsocketController {
@Value("${server.port}")
private String port;
public static final String INDEX = "index";
/**
* @author
* 描述:聊天页
* @param topic 发布订阅的频道主题
* @param myname 发布者的显示名称
* @return
*/
@RequestMapping("/index/{topic}/{myname}")
public ModelAndView index(@PathVariable("topic")String topic, @PathVariable("myname")String myname
) {
ModelAndView mav = new ModelAndView(INDEX);
mav.addObject("port", port);
mav.addObject("topic",topic);
mav.addObject("myname",myname);
return mav;
}
}
WebsocketConfig
@Configuration
public