Socket发送信息


import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.vo.UnifyQuestionVo;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;

@ServerEndpoint(value = "/send/questionSocket/{uid}")
@Component
@Slf4j
public class QuestionSocketServer {

    @Resource
    RedisTemplate redisTemplate;

    @Resource
    BaseCommonService baseCommonService;

    //concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。
    private static ConcurrentHashMap<String, Session> sessionPools = new ConcurrentHashMap<>();

    //收到客户端信息后,根据接收人的username把消息推下去或者群发
    @OnMessage
    public void onMessage(String message) throws IOException {
        log.info("接收到的消息数据是:{}",message);
        //一下是接收到消息之后的处理
        UnifyQuestionVo questionVo= JSON.parseObject(message, UnifyQuestionVo.class);

        MessageHandleFactory handleFactory = new MessageHandleFactory();
        MessageFactoryService questionHandle = handleFactory.getHandle(questionVo.getType());
        questionHandle.questionHandle(questionVo);
    }

    //错误时调用
    @OnError
    public void onError(Session session, Throwable throwable){
        log.error("发生错误了");
        throwable.printStackTrace();
    }

    //建立连接成功调用
    @OnOpen
    public void onOpen(Session session,@PathParam(value = "uid") String uid){
        sessionPools.put(uid, session);
    }

    //关闭连接时调用
    @OnClose
    public void onClose(@PathParam(value = "uid") String uid){
        sessionPools.remove(uid);
    }
    //发送消息,对接收的消息进行回复
    public void sendMessage(Session session, String message) throws IOException {
        if(session != null){
            synchronized (session) {
                session.getBasicRemote().sendText(message);
            }
        }
    }
    //给指定用户发送信息
    public void sendInfo(String uid, String message){
        Session session = sessionPools.get(uid);
        try {
            sendMessage(session, message);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

前端

var websocket;
  websocket = new WebSocket("ws://localhost:8085/rykj-large/webSocket/"+uid);
  data["uid"] = "u001";
			data["problemContent"] = "11111111";
			data["roleId"] = "02064b1ca7a2247b771967e056b1d278";
			data["type"] = 0;
			websocket.send(JSON.stringify(data));

可以参考:

https://gitee.com/shenzhanwang/Spring-websocket?_from=gitee_search
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值