亚游,【环球网综合报道】据外媒12月2日消息,标致集团近日在澳大利亚发出召回公告,将在该国召回64辆2015款308 GTi掀背车,召回原因是其轮胎气门嘴存在故障隐患,可能导致车辆轮胎压力减少。

  14时24分,机会终于来临。引导员邹晓将一组组“敌情”数据发送到空中和海上作战单元,某歼击机和舰艇顷刻间对“敌”形成合围之势。做什么生意本小利大李莹辉说,参研参试者按照试验大纲和指挥协同程序,圆满完成各项科研试验任务。当4名志愿者在舱内忍受着与外界隔离的狭小环境时,平均年龄27岁的科研队伍在舱外24小时轮流值班,经受无数次应急处置的考验。

发布于 2018-03-23 21:28:12 | 155 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

Spring Boot

Spring Boot 项目旨在简化创建产品级的 Spring 应用和服务。你可通过它来选择不同的 Spring 平台。可创建独立的 Java 应用和 Web 应用,同时提供了命令行工具来允许 'spring scripts'.


本篇文章主要介绍了SpringBoot+Websocket实现一个简单的网页聊天功能代码,具有一定的参考价值,有需要的可以了解一下

最近做了一个SpringBoot的项目,被SpringBoot那简介的配置所迷住。刚好项目中,用到了websocket。于是,我就想着,做一个SpringBoot+websocket简单的网页聊天Demo。

效果展示:

当然,项目很简单,没什么代码,一眼就能明白

导入websocket的包。

通过使用SpringBoot导入包的时候,我们可以发现,很多包都是以 spring-boot-starter 开头的,对于我这种强迫症 ,简直是福音


<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

配置websocket

服务端

首先新建一个WebSocketConfig的类,添加 @Component 注解 注入一个bean


@Component
public class WebSocketConfig {

  @Bean
  public ServerEndpointExporter serverEndpointExporter() {

    return new ServerEndpointExporter();
  }
}

新建一个service,本来觉得是新建一个控制器,但是我觉得这也不是控制器,但是也不太是service。最后还是选择新建一个servece。这里你如果有更好的想法可以按照你的来。

这个service里面有4个方法,这些方法很简单,通过名称就可以看出是什么意思。


@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket {

  private Session session;

  private static CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>();

  private MessageVO messageVO = new MessageVO();

  @OnOpen
  public void onOpen(Session session) {
    this.session = session;
    webSockets.add(this);


    messageVO.setType(1);
    messageVO.setUserNum(webSockets.size());
    messageVO.setMessage("有新的连接");

    ObjectMapper mapper = new ObjectMapper();

    String Json = "";
    try {
      Json = mapper.writeValueAsString(messageVO);
    } catch (Exception ex) {
      log.error(ex.getMessage());
    }

    this.sendMessage(Json);
    log.info("【websocket消息】有新的连接, 总数:{}", webSockets.size());
  }


  @OnClose
  public void onClose() {
    webSockets.remove(this);

    messageVO.setType(2);
    messageVO.setUserNum(webSockets.size());
    messageVO.setMessage("有用户离开");

    ObjectMapper mapper = new ObjectMapper();

    String Json = "";
    try {
      Json = mapper.writeValueAsString(messageVO);
    } catch (Exception ex) {
      log.error(ex.getMessage());
    }

    this.sendMessage(Json);


    log.info("【websocket消息】连接断开, 总数:{}", webSockets.size());
  }

  @OnMessage
  public void onMessage(String message) {

    messageVO.setType(3);
    messageVO.setUserNum(webSockets.size());
    messageVO.setMessage(message);

    ObjectMapper mapper = new ObjectMapper();

    String Json = "";
    try {
      Json = mapper.writeValueAsString(messageVO);
    } catch (Exception ex) {
      log.error(ex.getMessage());
    }

    this.sendMessage(Json);

    log.info("【websocket消息】收到客户端发来的消息:{}", message);
  }

  public void sendMessage(String message) {
    for (WebSocket webSocket : webSockets) {
      log.info("【websocket消息】广播消息, message={}", message);
      try {
        webSocket.session.getBasicRemote().sendText(message);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

客户端

客户端也就是我们的html,我用的是原生html5的websocket ,不需要其他的js。直接在html中写js就可以


<script type="application/javascript">
  var websocket = null;
  var cahtNum = $('.chat-num').text();
  if ('WebSocket' in window) {
    websocket = new WebSocket('ws:/localhost:8080/chat/webSocket');

  } else {
    alert('该浏览器不支持websocket');
  }

  websocket.onopen = function (event) {
    console.log('websocket建立连接');
  }

  websocket.onclose = function (event) {
    console.log('websocket关闭连接');
  }

  websocket.onmessage = function (event) {
    console.log('websocket收到消息' + event.data);
    var result = $.parseJSON(event.data);
    if (result.type == 3) {
      var element = document.getElementById('message-template').innerHTML;
      $('.message-container').append(element);
      $(".message-content:last").html(result.message);
    }
    else {
      $('.chat-num').text(result.userNum);
    }

  }

  websocket.onerror = function (event) {
    console.log('websocket通信发生错误');

  }

  window.onbeforeunload = function (event) {
    websocket.close();
  }

  $('.send-message').click(function () {
    var message = $('.chat-message').val();
    if (message == "") {
      mdui.alert('请输入要发送的消息');
      return;
    }
    sendmessage(message);
    $('.chat-message').val("");
  })

  function sendmessage(message) {
    websocket.send(message);
  }
</script>

这个就是全都的功能,非常简单,没什么特别的功能和代码。

最后附上Github的源代码亚游传送门

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHPERZ。



相关阅读 :
SpringBoot+Websocket实现一个简单的网页聊天功能代码
SpringBoot+Websocket实现一个简单的网页聊天功能代码
SpringBoot+Websocket实现一个简单的网页聊天功能代码
Spring boot实现一个简单的ioc(2)
SpringBoot配置devtools实现热部署的方法
SpringBoot mail中文附件乱码的解决方法
springboot+maven快速构建项目的示例代码
springboot+maven快速构建项目的示例代码
亚游springboot+maven快速构建项目的示例代码
解决springboot 获取form-data里的file文件的问题
解决springboot 获取form-data里的file文件的问题
解决springboot 获取form-data里的file文件的问题
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 亚游 All Rights Reserved   冀ICP备14009818号  亚游  广告服务
草莓被评“最脏蔬果” 林科院专家教你7招去农残 美油期货周二上涨35美分 再创3年半新高 震惊!球哥三弟超血腥隔扣 这球你只想看1次 郑凡柏:黄金多头或受阻 伦敦金日间走势分析 阿里文学公布最新战略 打造网文增量市场 部长们记者会上都说了点啥?表情包告诉你(图) 综述:美国征收钢铝关税引发英国业界广泛担忧 马克龙访美:借力特朗普 重塑法国国际地位 伊拉克一葬礼现场遭自杀式袭击 致8死31伤 苹果产业调研 期货价格跟涨 7月合约仍有上涨空间 NBA第一射手这样投篮!照着这个慢动作学就稳了 老人舍不得开空调在家热昏:给儿子多留一分是一分
高鑫零售年报亮相股价跌近20% 阿里入局改造几何? 女排半决赛III:沪苏或再遭鏖战 天津晋级在望 海帅:肯定不会继续执教拜仁 推荐此人接过教鞭 关键突破致胜!这次拯救广东的不是阿联和周鹏 2018赛季城围联将战柳州 地域版图再一次扩大 我国产航母战力远超辽宁舰:完全按航母标准设计建造 IH多合约逆势维持升水 福建天信召开升乙见面会 福建足球重回职业联赛版图 国外公司将推解决城市通勤的载人无人机 时速100公里 竞彩伤停:阿森纳拉卡泽特伤疑 马竞失主力后卫 这肮脏的比赛!魔术一定有床底交易 美公布加征关税建议清单 专家:威胁不能解决问题
证监会:富士康工业互联网获IPO批文 马德里赛兹维列夫完胜蒂姆 夺第三个大师赛冠军 中学校长超标建办公室挂牌“接待室” 被撤职 一文读懂证监会发布:监管执法对外国人违法一视同仁 离婚先考试?西安一家法院推出婚姻家庭考试卷 鲍威尔称将努力避免经济过热 司法部长张军:999名罪犯春节离监探亲 百分百回归 初三男生为保护被扇耳光母亲 从厨房拿刀指向父亲 丑陋!曼联版终极乱战 穆帅最大软肋又被狠戳 谁帮我杀人我给钱 致富小机器 小投资暴利 现在什么行业挣钱快 亚游