当前位置: 首页 > news >正文

加强政协机关网站建设深圳教育软件app开发

加强政协机关网站建设,深圳教育软件app开发,好的网站和网页有哪些,网站域名空间合同1.业务背景 负责的项目有一个搜索功能#xff0c;搜索的范围几乎是全表扫#xff0c;且数据源类型贼多。目前对搜索的数据量量级未知#xff0c;但肯定不会太少#xff0c;不仅需要搜索还得点击下载文件。 关于搜索这块类型 众多#xff0c;未了避免有个别极大数据源影响整…1.业务背景 负责的项目有一个搜索功能搜索的范围几乎是全表扫且数据源类型贼多。目前对搜索的数据量量级未知但肯定不会太少不仅需要搜索还得点击下载文件。 关于搜索这块类型 众多未了避免有个别极大数据源影响整个搜索效率我采用多线程异步搜索将搜索到每个数据源数据使用 websocket 响应给前端。 2.遇到的问题 1 .想自定义接收前端消息的类型因为接收的消息类型都是string 类型所以一看肯定不符合我的需求。唉怪我没多问 思路 其实接收是string一点不影响。直接上json转对象就行。 2. socket 什么时候关闭  思路 1.心跳包检测心跳达到次数断开socket。前后端互发心跳 2. 因为多线程后端开启线程监听线程有没有执行完的队列还有没有还没执行的任务没有开始计时达到时间关闭socket若计时期间有任务重置计时。后端监听 3.相关资料 一文搞懂四种 WebSocket 使用方式_enablewebsocket_Java架构狮的博客-CSDN博客 4.代码实现 1.注解写法 /*** 开启WebSocket支持* Created by huiyunfei on 2019/5/31.*/ Configuration EnableWebSocket public class WebSocketConfig implements ServletContextInitializer {Beanpublic ServerEndpointExporter serverEndpointExporter() {ServerEndpointExporter serverEndpointExporter new ServerEndpointExporter();return serverEndpointExporter;}/*** 启动加载** param servletContext*/Overridepublic void onStartup(ServletContext servletContext) {servletContext.addListener(WebAppRootListener.class);// 接收base64的字符串,等于50M 解决上传内容过大问题servletContext.setInitParameter(org.apache.tomcat.websocket.textBufferSize, 52428800);servletContext.setInitParameter(org.apache.tomcat.websocket.binaryBufferSize, 52428800);}} OnOpenpublic void onOpen(Session session) {System.out.println(与前端建立了WebSocket连接);this.session session;webSocketSet.add(this); //加入set中 // addOnlineCount(); //在线数加1 // log.info(有新窗口开始监听:sid,当前在线人数为 getOnlineCount());this.sidsid;try {sendMessage(连接成功);} catch (IOException e) {log.error(websocket IO异常);}}OnMessagepublic void handleMessage(Session session, String message) throws IOException {session.getBasicRemote().sendText(Reversed: new StringBuilder(message).reverse());}OnClosepublic void onClose(Session session) {System.out.println(与前端断开了WebSocket连接);}OnErrorpublic void onError(Throwable throwable) {throwable.printStackTrace();} 注意谁说是注解开发切记并不是发送http请求下面是错误实例 上面我不是提到想自定义接收参数然后我一直以为加个注解就行。接收类型别动。 不然就像苦逼的我程序都启动不了排错半天时间。 OnMessagepublic void onMessage(Session session, FullSearchParam param) {System.out.println(接收到前端发送的消息 param.getSearchContext());try { // fullSearch(param, session);} catch (IOException e) {e.printStackTrace();} catch (EncodeException e) {throw new RuntimeException(e);}} 2.实现接口 package com.trinity.web.controller.search.spring;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;/*** 开启WebSocket支持* Created by huiyunfei on 2019/5/31.*/ Configuration EnableWebSocket public class SpringSocketConfig implements WebSocketConfigurer {Autowiredprivate SpringSocketHandle springSocketHandle;Autowiredprivate SpringAbstractWebSocketHandler springAbstractWebSocketHandler;Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(springSocketHandle, /spring-ws).setAllowedOrigins(*).addHandler(springAbstractWebSocketHandler, /spring-ws1).setAllowedOrigins(*);}}这种方式接收消息需要判断因为 WebSocketMessage 是接口spring 提供了三个实现类分别是文本 字节 ping目前后两种还不知道怎么使用。所以这种方式需要区判断前端传输的数据类型分别处理。 Component public class SpringSocketHandle implements WebSocketHandler {/*** 连接成功后调用。* param session* throws Exception*/Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {System.out.println(SpringSocketHandle, 收到新的连接: session.getId());}/*** 处理发送来的消息** param session* param message* throws Exception*/Overridepublic void handleMessage(WebSocketSession session, WebSocketMessage? message) throws Exception {String msg SpringSocketHandle, 连接 session.getId() 已收到消息。;System.out.println(msg); // this.handleMessage(session, );session.sendMessage(new TextMessage(msg));}/*** WS 连接出错时调用** param session* param exception* throws Exception*/Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {System.out.println(WS 连接发生错误);}/*** 连接关闭后调用** param session* param closeStatus* throws Exception*/Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {System.out.println(WS 关闭连接);}/*** 支持分片消息** return*/Overridepublic boolean supportsPartialMessages() {return false;} 这种方式就更加简单不需要我们自己去判断 Slf4j Component public class SpringAbstractWebSocketHandler extends AbstractWebSocketHandler {/*** 业务service*/Autowiredprivate IDampDatasourceInfoService dampDatasourceInfoService;Autowiredprivate IDampAssetInfoService dampAssetInfoService;Autowiredprivate SearchThreadPool searchThreadPool;Autowiredprivate TokenService tokenService;/*** 静态变量用来记录当前在线连接数。应该把它设计成线程安全的。*/private static int onlineCount 0;/*** concurrent包的线程安全Set用来存放每个客户端对应的MyWebSocket对象。*/private static CopyOnWriteArraySetSearchSocketServer webSocketSet new CopyOnWriteArraySetSearchSocketServer();/*** 与某个客户端的连接会话需要通过它来给客户端发送数据*/private Session session;protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {log.info(接收到搜索的消息,搜索内容为{},message);ListString authorization session.getHandshakeHeaders().get(Authorization);FullSearchParam param JSONObject.parseObject(message.getPayload(), FullSearchParam.class);fullSearch(param, session);}protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {}protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {} 5.总结 尝试写不会的代码总是非常的认真但也非常煎熬。 然后接收消息时用到了 SecurityUtils 公共方法 从token 获取用户id但是却出现获取失败。 明天再看 public class SecurityUtils {/*** 用户ID**/public static Long getUserId(){try{return getLoginUser().getUserId();}catch (Exception e){throw new ServiceException(获取用户ID异常, HttpStatus.UNAUTHORIZED);}}/*** 获取用户**/public static LoginUser getLoginUser(){try{return (LoginUser) getAuthentication().getPrincipal();}catch (Exception e){throw new ServiceException(获取用户信息异常, HttpStatus.UNAUTHORIZED);}} /*** 获取Authentication*/public static Authentication getAuthentication(){return SecurityContextHolder.getContext().getAuthentication();}
http://www.zqtcl.cn/news/510521/

相关文章:

  • 绍兴企业网站推广Django 个人博客网站开发
  • html5 开发网站图门市建设局网站
  • wordpress 建立网站江苏电信网站备案
  • 企业网站能个人备案吗成都蜀美网站建设
  • 网站开发 占位符直播网站开发接入视频
  • 网站 易用性原则义乌进货网平台
  • 做网站的你选题的缘由是什么洛阳网站建设找汉狮
  • 常德住房和城乡建设局网站陕西省建设厅的网站
  • 国外做meta分析的网站开发公司替业主承担物业费承诺书
  • 百度收录网站定位地址wordpress 检测浏览器
  • 学习网站建设优化wordpress 轮播广告
  • 迈诺网站建设wordpress 前台注册登录
  • 网站开发市场成本免费建站网站大全
  • 四川省建设人才网站通过ip访问网站需要怎么做
  • 网站建设需要知道什么财税公司怎么找客源
  • 赣州那里有做网站的公司物流网站建设平台
  • 青色系网站北京的建筑设计公司
  • 纺织品做外贸一般在哪个网站上手机网站qq登录插件
  • 长沙做公司网站有没有免费的云服务器可以用
  • 济南专业网站优化如何制作小程序二维码
  • 建站平台软件猪八戒做网站要多少钱
  • 建设集团网站专业开发网站多少钱
  • 网站制作流程有哪些wordpress众筹
  • 网站打开是建设中手机咋建网站
  • 外贸专业网站的公司建百度网站
  • 北京做网站开发公司有哪些网站技术开发文档模板
  • 图解asp.net网站开发实战外管局网站先支后收怎么做报告
  • 访问自己做的网站吗织梦自动生成手机网站
  • 湖南岳阳网站开发网络公司兰州最好的互联网公司
  • 网站上线 流程网站左侧漂浮代码