package com.pxy.chat;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import com.pxy.entity.User;
/**
* @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
*/
@ServerEndpoint("/check_user")
public class H5ServletServerSocket {
// 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 1;
// concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
private static CopyOnWriteArraySet<H5ServletServerSocket> webSocketSet = new CopyOnWriteArraySet<H5ServletServerSocket>();
// 与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
/**
* 连接建立成功调用的方法
*
* @param session
* 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(Session session) {
this.session = session;
webSocketSet.add(this); // 加入set中
addOnlineCount(); // 在线数加1
System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose() {
webSocketSet.remove(this); // 从set中删除
subOnlineCount(); // 在线数减1
System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
}
/**
* 收到客户端消息后调用的方法
*
* @param message
* 客户端发送过来的消息
* @param session
* 可选的参数
*/
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("来自客户端的消息:" + message);
// 群发消息
for (H5ServletServerSocket item : webSocketSet) {
try {
item.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}
/**
* 发生错误时调用
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
System.out.println("发生错误");
error.printStackTrace();
}
/**
* 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
*
* @param message
* @throws IOException
*/
public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
// this.session.getAsyncRemote().sendText(message);
}
//获得当前在线人数
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
H5ServletServerSocket.onlineCount++;
}
public static synchronized void subOnlineCount() {
H5ServletServerSocket.onlineCount--;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于html5-websocket的网页版聊天室,后台使用springMVC和mybatis框架.zip (57个子文件)
adminChat-master
.classpath 1KB
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.jdt.core.prefs 357B
.jsdtscope 510B
com.genuitec.eclipse.core.prefs 192B
org.eclipse.wst.common.component 478B
org.eclipse.wst.common.project.facet.core.xml 403B
org.eclipse.wst.jsdt.ui.superType.container 49B
src
configuration.xml 3KB
mybatis-config.xml 221B
springmvc-servlet.xml 2KB
applicationContext.xml 7KB
log4j.properties 726B
com
pxy
chat
H5ServletServerSocket.java 3KB
controller
UserController.java 3KB
dao
UserMapper.java 883B
UserMapper.xml 3KB
service
UserService.java 441B
imp
UserServiceImp.java 954B
entity
User.java 625B
validator
UserValidator.java 583B
WebRoot
WEB-INF
classes
configuration.xml 3KB
mybatis-config.xml 221B
springmvc-servlet.xml 2KB
applicationContext.xml 7KB
log4j.properties 726B
.gitignore 5B
com
pxy
dao
UserMapper.xml 3KB
web.xml 2KB
jsp
Register.jsp 3KB
Chat.jsp 5KB
Login.jsp 3KB
config
springmvc-config.xml 2KB
index.jsp 833B
font
fontawesome-webfont.eot 41KB
fontawesome-webfont_162a16fe.eot 41KB
fontawesome-webfont.woff 23KB
fontawesome-webfont.svgz 21KB
fontawesome-webfont.svg 72KB
fontawesome-webfont.ttf 41KB
image
body-bg.png 16KB
1.jpg 5KB
headshot.png 60KB
bg.jpg 41KB
3.jpg 111KB
2.png 17KB
js
bootstrap.js 47KB
jquery-1.7.2.min.js 93KB
css
pages
plans.css 5KB
login.css 3KB
bootstrap.min.css 79KB
adminia.css 8KB
font-awesome.css 11KB
adminia-responsive.css 701B
bootstrap-responsive.min.css 9KB
META-INF
MANIFEST.MF 36B
.project 1KB
共 57 条
- 1
资源评论
博士僧小星
- 粉丝: 1924
- 资源: 5892
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功