api
引入Tomcat下websocket-api.jar
后台服务端代码
package com.fh.controller.app.socket;
import java.io.IOException;
import java.util.Map;
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;
@ServerEndpoint("/websocket")
public class WebsocketService {
private static int online = 0;
private static CopyOnWriteArraySet<WebsocketService> websocketServices = new CopyOnWriteArraySet<WebsocketService>();
private Session session;
@OnOpen
public void onOpen(Session session){
this.session = session;
websocketServices.add(this);
addOnlineCount();
System.out.println("有新的连接加入,当前在线人数为"+getOnlineCount());
}
@OnClose
public void onClose(){
websocketServices.remove(this);
subOnline();
System.out.println("有一个连接关闭,当前在线人数为"+getOnlineCount());
}
public static synchronized void subOnline() {
WebsocketService.online--;
}
public static synchronized int getOnlineCount() {
return online;
}
public static synchronized void addOnlineCount() {
WebsocketService.online++;
}
@OnMessage
public void onMessage(String message,Session session){
System.out.println("来自客户端的消息:"+message);
String id = session.getId();
System.out.println(id);
for(WebsocketService service:websocketServices){
try {
Session strSession = service.session;
System.out.println(strSession.getId());
/*if(id.equals(strSession.getId())){
continue;
}*/
/*if(id.equals(service.getId(service))){
}*/
service.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
continue;
}
}
}
public void sendMessage(String message) throws IOException{
this.session.getBasicRemote().sendText(message);
}
@OnError
public void onError(Session session,Throwable e){
System.out.println("发生错误");
e.printStackTrace();
}
}
前段页面
<!DOCTYPE html>
<html>
<head>
<title>websocket</title>
<script type="text/javascript">
var websocket = null;
if('WebSocket' in window){
websocket = new WebSocket("ws://localhost:8080/Auxiliary/websocket");
}else{
alert("当前浏览器不支持WebSocket");
}
function send(){
var message = document.getElementById("message").value;
websocket.send(message);
}
function showMessage(message){
document.getElementById("message-list").innerHTML += message+"<br/>";
}
function closeWebsocket(){
websocket.close();
}
websocket.onerror = function(){
showMessage("连接发生错误");
}
websocket.onopen = function(){
showMessage("websocket连接成功");
}
websocket.onmessage = function(event){
showMessage(event.data);
}
websocket.onclose = function(){
showMessage("websocket连接关闭");
}
websocket.onbeforeupload = function(){
closeWebsocket();
}
</script>
</head>
<body>
<h2>chatroom with websocket</h2>
<div id="container">
<div>
<input type="text" name="message" id="message" placeholder="hello,websocket"/>
<input type="button" value="send" onclick="send()"/>
</div>
<div id="message-list">
</div>
</div>
</body>
</html>
注意:websocket跨域和URL拦截问题