websocket

websocket发送接收实时消息,前端后台,记不住就写下来。

后台

import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

import com.alibaba.fastjson.JSON;


@ServerEndpoint("/weixin/start/{userid1}/{userid2}")
public class testWebsecket {

private static ConcurrentMap<String, Object> websocketMap = new ConcurrentHashMap<>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;


/**
* 连接建立成功调用的方法
*
* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(@PathParam(value = "userid1") String userId1,@PathParam(value = "userid2") String userId2,Session session){
this.session = session;
websocketMap.put(userId1,this);
System.out.println(websocketMap.size());
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(@PathParam(value = "userid1") String userid){
websocketMap.remove(userid);
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
* @param session 可选的参数
* @throws IOException
*/
@OnMessage
public void onMessage(@PathParam(value = "userid1") String userid1,@PathParam(value = "userid2") String userId2,String message,Session session) throws IOException{
testWebsecket com = (testWebsecket) websocketMap.get(userId2);
com.alibaba.fastjson.JSONObject object = JSON.parseObject(message);
if(websocketMap.containsKey(userId2)){
com.session.getAsyncRemote().sendText(message);
}else{
this.session.getBasicRemote().sendText("用户未上线");
}
}
/**
* 发生错误时调用
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
System.out.println("发生错误");
error.printStackTrace();
}
}

 

前端:两个一样的页面,参数不一样

①:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" >
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<title>testWebsecket</title>
</head>
<body>
<form>
<div id="messageSendContent"></div>
<textarea rows="5" cols="10" id="messageContent" placeholder="消息内容"></textarea>
<div onclick="submit()">发送</div>
</form>
</body>
<script src="js/jquery.min.js"></script>
<script src="js/layer/layer.js"></script>
<script>
var ws = null;
if('WebSocket' in window){
ws = new WebSocket("ws://localhost:8080/weixin/start/"+1+"/"+2);
}else{
layer.msg('升级浏览器')
}
ws.onerror = function(){
layer.msg('error')
}
ws.onopen = function(){
layer.msg('yes')
}
var div = document.getElementById("messageSendContent");
ws.onmessage = function(event){
console.log(event.data);
var span = document.createElement("div");
if(event.data=="用户未上线"){
layer.msg("用户未上线");
}else{
span.innerHTML = JSON.parse(event.data).data;
div.appendChild(span);
}
}
window.onbeforeunload = function(){
ws.close();
}
function submit(){
var data = {data:$('#messageContent').val()};
ws.send(JSON.stringify(data));
$('#messageContent').val("");
}
</script>

</html>

②:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" >
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<title>testWebsecket</title>
</head>
<body>
<form>
<div id="messageSendContent"></div>
<textarea rows="5" cols="10" id="messageContent" placeholder="消息内容"></textarea>
<div onclick="submit()">发送</div>
</form>
</body>
<script src="js/jquery.min.js"></script>
<script src="js/layer/layer.js"></script>
<script>
var ws = null;
if('WebSocket' in window){
ws = new WebSocket("ws://localhost:8080/weixin/start/"+2+"/"+1);
}else{
layer.msg('升级浏览器')
}
ws.onerror = function(){
layer.msg('error')
}
ws.onopen = function(){
layer.msg('yes')
}
var div = document.getElementById("messageSendContent");
ws.onmessage = function(event){
var span = document.createElement("div");
if(event.data=="用户未上线"){
layer.msg("用户未上线");
}else{
span.innerHTML = JSON.parse(event.data).data;
div.appendChild(span);
}
}
window.onbeforeunload = function(){
ws.close();
}
function submit(){
var data = {data:$('#messageContent').val()};
ws.send(JSON.stringify(data));
$('#messageContent').val("");
}
</script>

</html>

这是简单的实时发送接收消息,具体的业务还要细化,先做个记录拿来用,样式再改

posted @ 2019-07-29 23:57  tongCB  阅读(159)  评论(0编辑  收藏  举报