package com.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.log4j.Logger;
/**
* @author
* @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
*/
@ServerEndpoint(value = "/websocket")
public class WebSocketTest {
private static Logger logger = Logger.getLogger(WebSocketTest.class);
//线程安全的静态变量,表示在线连接数
private static volatile int onlineCount = 0;
//用来存放每个客户端对应的WebSocketTest对象,适用于同时与多个客户端通信
public static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<WebSocketTest>();
//若要实现服务端与指定客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
public static ConcurrentHashMap<Session, Object> webSocketMap = new ConcurrentHashMap<Session, Object>();
//与某个客户端的连接会话,通过它实现定向推送(只推送给某个用户)
private Session session;
/**
* 连接建立成功调用的方法
*
* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(Session session) {
this.session = session;
webSocketSet.add(this); //加入set中
webSocketMap.put(session, this); //加入map中
addOnlineCount(); //在线数加1
System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(Session closeSession) {
webSocketSet.remove(this); //从set中删除
webSocketMap.remove(closeSession); //从map中删除
subOnlineCount(); //在线数减1
System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
* @param mySession 可选的参数
* @throws Exception
*/
@OnMessage
public void onMessage(String message, Session mySession) throws Exception {
logger.info("来自客户端的消息:" + message);
//--------------群发消息(多用于聊天室场景)
JSONObject json = JSONObject.parseObject(message);
for (WebSocketTest item : webSocketSet) {
try {
item.sendAllMessage(json.getString("msgContent"));
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
// //推送给单个客户端
// for (Session session : webSocketMap.keySet()) {
// if (session.equals(mySession)) {
// WebSocketTest item = (WebSocketTest) webSocketMap.get(mySession);
// try {
// String msg = json.getString("msgContent");
// item.sendMessage(mySession, msg);
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
//
//
// }
}
/**
* 发生错误时调用
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
logger.info("发生错误");
// error.printStackTrace();
}
//给所有客户端发送信息
public void sendAllMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}
//定向发送信息
public void sendMessage(Session mySession, String message) throws IOException {
synchronized (this) {
try {
if (mySession.isOpen()) {//该session如果已被删除,则不执行发送请求,防止报错
//this.session.getBasicRemote().sendText(message);
mySession.getBasicRemote().sendText(message);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketTest.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketTest.onlineCount--;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
ssm整合webSocket、rabbitMq
共226个文件
xml:81个
jar:48个
class:40个
需积分: 33 35 下载量 3 浏览量
2018-07-11
19:28:28
上传
评论 4
收藏 20.83MB ZIP 举报
温馨提示
ssm整合webSocket、rabbitMq ssm整合webSocket、rabbitMq ssm整合webSocket、rabbitMq
资源推荐
资源详情
资源评论
收起资源包目录
ssm整合webSocket、rabbitMq (226个子文件)
WebSocketTest.class 4KB
WebSocketTest.class 4KB
MyWebSocketHandler.class 4KB
MyWebSocketHandler.class 4KB
MyWebSocketHandler.class 4KB
UserController.class 2KB
UserController.class 2KB
UserServiceImpl.class 2KB
UserServiceImpl.class 2KB
HandshakeInterceptor.class 2KB
HandshakeInterceptor.class 2KB
HandshakeInterceptor.class 2KB
UserTestController.class 2KB
UserTestController.class 2KB
MyWebSocketConfig.class 2KB
MyWebSocketConfig.class 2KB
MyWebSocketConfig.class 2KB
MqSender.class 2KB
MqSender.class 1KB
UserTest.class 1KB
UserTest.class 1KB
User.class 1KB
User.class 1KB
UserTestServiceImpl.class 1KB
UserTestServiceImpl.class 1KB
RabbitmqService.class 893B
RabbitmqService.class 893B
Producer.class 825B
Producer.class 825B
MyWebSocketHandler$1.class 791B
MyWebSocketHandler$1.class 791B
MyWebSocketHandler$1.class 776B
IUserService.class 462B
IUserService.class 462B
UserMapper.class 432B
UserMapper.class 432B
UserTestMapper.class 384B
UserTestMapper.class 384B
UserTestService.class 211B
UserTestService.class 211B
.classpath 1KB
org.eclipse.wst.common.component 764B
org.eclipse.wst.jsdt.ui.superType.container 49B
.gitattributes 378B
.gitignore 649B
index.html 1KB
index.html 1KB
Can-WebSocekt.iml 7KB
guava-25.1-jre.jar 2.61MB
mysql-connector-java-8.0.11.jar 1.94MB
javaee-api-7.0.jar 1.84MB
aspectjweaver-1.8.8.jar 1.78MB
druid-1.0.9.jar 1.76MB
spring-context-4.0.2.RELEASE.jar 951KB
spring-core-4.0.2.RELEASE.jar 938KB
jackson-databind-2.3.0.jar 893KB
jackson-mapper-asl-1.9.13.jar 762KB
mybatis-3.2.6.jar 696KB
spring-beans-4.0.2.RELEASE.jar 653KB
spring-web-4.0.2.RELEASE.jar 649KB
spring-webmvc-4.0.2.RELEASE.jar 645KB
protobuf-java-2.6.0.jar 582KB
javax.mail-1.5.0.jar 510KB
log4j-1.2.17.jar 478KB
spring-test-4.0.2.RELEASE.jar 437KB
spring-jdbc-4.0.2.RELEASE.jar 410KB
jstl-1.2.jar 405KB
amqp-client-3.3.4.jar 385KB
fastjson-1.1.41.jar 350KB
spring-aop-4.0.2.RELEASE.jar 344KB
checker-qual-2.0.0.jar 335KB
commons-codec-1.9.jar 258KB
spring-websocket-4.0.2.RELEASE.jar 254KB
spring-rabbit-1.3.5.RELEASE.jar 243KB
spring-tx-4.0.2.RELEASE.jar 242KB
gson-2.8.5.jar 236KB
spring-messaging-4.0.2.RELEASE.jar 235KB
jackson-core-asl-1.9.13.jar 227KB
spring-expression-4.0.2.RELEASE.jar 200KB
jackson-core-2.3.0.jar 193KB
commons-io-2.4.jar 181KB
spring-amqp-1.6.1.RELEASE.jar 121KB
spring-retry-1.1.0.RELEASE.jar 102KB
javax.servlet-api-3.1.0.jar 94KB
commons-fileupload-1.3.1.jar 67KB
activation-1.1.jar 62KB
commons-logging-1.1.3.jar 61KB
mybatis-spring-1.2.2.jar 48KB
jackson-annotations-2.3.0.jar 34KB
slf4j-api-1.7.7.jar 29KB
jsr305-3.0.2.jar 19KB
error_prone_annotations-2.1.3.jar 13KB
slf4j-log4j12-1.7.7.jar 9KB
j2objc-annotations-1.1.jar 9KB
aopalliance-1.0.jar 4KB
animal-sniffer-annotations-1.14.jar 3KB
WebSocketTest.java 5KB
MyWebSocketHandler.java 3KB
UserController.java 2KB
UserServiceImpl.java 2KB
共 226 条
- 1
- 2
- 3
资源评论
coder.Funs
- 粉丝: 34
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功