package csm.web.controller;
import com.alibaba.fastjson.JSON;
import csm.app.page.ServerInterfaceImpl;
import csm.web.model.Net;
import csm.web.util.webThread.CacheTest;
import csm.web.util.webThread.DataQueue;
import csm.web.util.webThread.ReceiveSingle;
import csm.web.util.webThread.SendThread;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
@ServerEndpoint("/webSocket/{userName}")
public class WebSocketDemo {
private Session session;
private String userName;
private static int onlineCount = 0;//当前客户端的个数
//客户端和对应的连接
private static Map<String, WebSocketDemo> clients = new ConcurrentHashMap<String, WebSocketDemo>();
//保存向页面推送的信息
//连接建立
@OnOpen
public void onOpen(@PathParam("userName") String userName, Session session) {
this.userName = userName;
this.session = session;
WebSocketDemo.onlineCount++;
clients.put(userName, this);
System.out.println("【websocket消息】有新的连接, 总数:{}==" + clients.toString());
}
//连接关闭
@OnClose
public void onClose() {
clients.remove(userName);
WebSocketDemo.onlineCount--;
System.out.println("【websocket消息】连接断开, 总数:{}==" + clients.toString());
}
//客户端发送的信息
@OnMessage
public void onMessage(String message) {
System.out.println("【websocket消息】收到客户端发来的消息:{}==" + message);
}
/**
* 推送消息到客户端
*
* @throws IOException
*/
public static void sendMessage() {
try {
Map<String, Object> map = DataQueue.getMagQueue().take();
String datakey = map.keySet().iterator().next();
Iterator<String> iterator = clients.keySet().iterator();
while (iterator.hasNext()){
String name=iterator.next();
if (name.contains(datakey) && datakey.equals("netNode")) {
WebSocketDemo webSocket = clients.get(name);
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get(datakey);
String string = JSON.toJSONString(list);
webSocket.session.getBasicRemote().sendObject(string);
}else if (name.contains(datakey) && datakey.equals("file")){
WebSocketDemo webSocket = clients.get(name);
webSocket.session.getBasicRemote().sendObject(map.get(datakey).toString());
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (EncodeException e) {
System.out.println(234);
e.printStackTrace();
} catch (IOException e) {
System.out.println(1231);
}
}
}
pom
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-client</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-api</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId>
<version>${jetty.version}</version>
</dependency>
jetty启动类
ServerContainer serverContainer = WebSocketServerContainerInitializer.configureContext((ServletContextHandler) server.getHandler());
serverContainer.addEndpoint(WebSocketDemo.class);