为什么80%的码农都做不了架构师?>>>
1.pom
javax
javaee-api
7.0
这里使用javax.websocket,没有使用springmvc.websocket。
2.服务端 java代码
/***
* webScoket服务.
* format URL as ws://ip:port/{finalName}/websocket/{module}/{key}
*
*
* @author svili
* @data 2017年7月12日
*
*/
/**component注解是为了使用spring容器的依赖注入,以实现服务端push()*/
@Component
@ServerEndpoint(value = "/websocket/{module}/{key}")
public class SimpleWebSocket {
/** key = {module.key} */
private static ConcurrentHashMap> consumers = new ConcurrentHashMap>();
/**
* 连接建立成功调用的方法
*
* @param session
* session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(@PathParam("module") String module, @PathParam("key") String key, Session session) {
if (!consumers.containsKey(module + "." + key)) {
Set group = new HashSet();
group.add(session);
consumers.put(module + "." + key, group);
} else {
consumers.get(module + "." + key).add(session);
}
}
@OnMessage
public void onMessage(@PathParam("module") String module, @PathParam("key") String key, String message,
Session session) throws IOException {
push(module, key, message);
}
@OnClose
public void onClose(@PathParam("module") String module, @PathParam("key") String key, Session session) {
Set group = consumers.get(module + "." + key);
if (group != null) {
group.remove(session);
}
}
@OnError
public void onError(@PathParam("module") String module, @PathParam("key") String key, Session session,
Throwable error) {
throw new RuntimeException(error);
}
/** 消息推送 */
public boolean push(String module, String key, String message) throws IOException {
Set group = consumers.get(module + "." + key);
if (group != null) {
for (Session consumer : group) {
consumer.getBasicRemote().sendText(message);
}
}
return true;
}
}
3.客户端(浏览器)JS代码
4.服务端push
@RestController
@RequestMapping(value = "/websocket/test")
public class SocketTest {
@Resource
private SimpleWebSocket publisher;
@RequestMapping("/push")
public JsonModel push(String module, String key, String message) {
try {
publisher.push(module, key, message);
} catch (IOException e) {
e.printStackTrace();
}
//JsonModel是自定义的javaBean
return JsonModel.success("success");
}
}