即时聊天系统

后台代码

package com.wyn.pro.wynpro.customermanager.test;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CopyOnWriteArraySet;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 net.sf.json.JSONObject;@ServerEndpoint("/hello/{username}")
public class WebsocketTest {private Session session;private String username;//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。  private static int onlineCount = 0;private static final CopyOnWriteArraySet<WebsocketTest> webSocketSet=new CopyOnWriteArraySet<WebsocketTest>();// 日期格式化  private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm");public WebsocketTest(){System.out.println("WebsocketTest..");}@OnOpenpublic void onopen(Session session,@PathParam("username") String username){System.out.println("连接成功");this.session=session;this.username=username;webSocketSet.add(this);addOnlineCount();System.out.println(onlineCount);}/**  * 接受客户端的消息,并把消息发送给所有连接的会话  * @param message 客户端发来的消息  * @param session 客户端的会话  */    @OnMessage      public void onsend(Session session,String msg){try {JSONObject fObject = JSONObject.fromObject(msg);fObject.put("date", DATE_FORMAT.format(new Date()));for(WebsocketTest websocketTest:webSocketSet) {synchronized (WebsocketTest.class) { fObject.put("isSelf", websocketTest.session.equals(session));fObject.put("username", this.username);fObject.put("num", onlineCount);//websocketTest.session.getAsyncRemote().sendText(fObject.toString());websocketTest.sendMessage(fObject.toString());}}} catch (Exception e) {e.printStackTrace();}}@OnClosepublic void onclose(Session session){// 添加关闭会话时的操作  webSocketSet.remove(this);  //从set中删除  subOnlineCount();           //在线数减1  System.out.println("close....");}@OnError   public void error(Throwable t) {    // 添加处理错误的操作    System.out.println("发生错误了");  }  public  static synchronized void addOnlineCount() {WebsocketTest.onlineCount++;}public static synchronized void subOnlineCount() {  WebsocketTest.onlineCount--;  }  public synchronized  void  sendMessage(String message) throws IOException{  this.session.getAsyncRemote().sendText(message);//非阻塞式的  }  }

前台页面代码

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>即时聊天系统</title>
</head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript">var websocket;function linksys(){//debuggerif(websocket){alert("已经建立连接");return;}var username = $("#name").val();if(username==null||username==""){alert("请先输入代号");return;}websocket = new WebSocket("ws://192.168.0.17:9999/order/hello/"+username);/*与后台系统建立连接  */websocket.onopen = function(evn){console.log("与后台系统建立连接---------当前连接数:");}websocket.onmessage = function(evn){debuggermessage = JSON.parse(evn.data);$("#num").text(message.num);//alert(message.username);$("#table").append("<tr><td>"+message.username+"</td><td>"+message.date+"</td></tr><tr><td colspan='2'>"+message.content+"</td></tr>");} websocket.onclose = function(){console.log("关闭");};}function subsend(){if(websocket){content1 = $("#content").val();jsonstr=JSON.stringify({  content : content1 });//alert(jsonstr);websocket.send(jsonstr);}else{alert("请先连接,再发送信息");}}</script>
<body>
<h1>即时聊天系统</h1>
当前用户姓名<input type="text" name="username" id="name"><button onclick="linksys()">连接系统</button><br>
聊天内容<input type="text" name="content" id="content"><button onclick="subsend()" >发送</button><br>
当前在线客户<p id="num"><p>
---------------------------------------------------------------<br>
聊天记录<br>
<table id="table" border="1">
</table>
</body>
</html>

maven依赖

<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.0</version></dependency><!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.5</version></dependency><!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><!-- https://mvnrepository.com/artifact/net.sf.ezmorph/ezmorph --><dependency><groupId>net.sf.ezmorph</groupId><artifactId>ezmorph</artifactId><version>1.0.6</version></dependency><!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency><!-- https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api --><dependency><groupId>javax.websocket</groupId><artifactId>javax.websocket-api</artifactId><version>1.0</version><scope>provided</scope></dependency>

java websocket实现即时聊天系统相关推荐

  1. WebSocket之仿QQWeb即时聊天系统(上)

    1. 前言 Java web学完了,到了学期末,开始课设了,一共给了几个题目,大部分都是 JSP+servlet题目,当然我们也是主要学习的这些,一般都是什么什么管理系统,没啥意思,看到一个仿QQWe ...

  2. java即时聊天系统毕业_(完整版)基于Java即时聊天系统的设计与实现毕业论文设计...

    目录 1 前言............................................................................................. ...

  3. WebSocket之仿QQWeb即时聊天系统(下)

    1. 前言 上篇主要说了准备阶段和要学的基本知识,当然学的知识还是死的,还是要敲代码,下篇主要就是用上编学的知识实现本次课设任务 WebSocket之仿QQWeb即时聊天系统(上) WebSocket ...

  4. Java Websocket实例【服务端与客户端实现全双工通讯】

    Java Websocket实例[服务端与客户端实现全双工通讯] 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP ...

  5. SpringCloud工作笔记060---SpringBoot中使用WebSocket实现即时通讯_实现呼叫中心业务封装

    JAVA技术交流QQ群:170933152 ---------------我们主要用这个来转接,呼叫中心发过来的分机电话 呼叫中心:呼叫过程,首先呼叫中心运营商给个,api手册,api会规定,首先登陆 ...

  6. springboot框架下利用websocket实现即时通讯

    springboot框架下利用websocket实现即时通讯(文章末尾有git项目打包文件,直接下载使用即可) 用websocket实现简单的在线聊天,先画个时序图,直观感受下流程 SystemCon ...

  7. 基于vert.x与webSocket的简单聊天系统

    基于vert.x与webSocket的简单聊天系统 使用vert.x和webSocket的简单聊天实现 主要的verticle package com.zhku.analysis.service; / ...

  8. Java中的即时编译(Just-in-time compilation)

    作者:知秋原文:http://t.cn/RYLPEMc 像其他一些编程语言一样,Java通常也被称为"编译语言".但有时你可能会感到困惑,尤其是当有人告诉你Java是JIT编译,并 ...

  9. java websocket 上传大文件,使用java websocket API和Javascript上传文件

    我正在学习websocket并且已经使用websocket / json完成了聊天程序.但我坚持上传ATM的文件.任何建议&回答会很感激. 服务器端: package websocket; i ...

最新文章

  1. 系统架构设计的原则和模式
  2. 【算法】算法秋招个人总结
  3. InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor
  4. 三、mongodb数据库系列——mongodb和python交互 总结
  5. Android 7.0后 播放U盘中的视频文件的解决方案
  6. Eclipse 字体选择
  7. 谈谈对象和XML文件的转换
  8. 前端根据银行卡号或银行的简码动态显示logo图标
  9. windows 7 静默 安装 软件
  10. 苹果计算机 win10,图文教程!苹果电脑和WIN10的完美融合井井有条的美
  11. js 截取长图(html2canvas),并下载
  12. 扒皮 || 优衣库X KAWS凭什么会被疯抢??!!!
  13. C5750X7R2E105K230KA(电容器)MSP430F5249IRGCR微控制器资料
  14. java 导出word换行_POI写Word换行
  15. 水深6到9米有鱼吗_红黄尾鲴鱼钓法大全(附配方)
  16. 芯片破解、解密方法介绍
  17. PostgreSQL安装、验证安装、pgAdmin初步简单使用
  18. android连连看源代码,#经典连连看#源码分享
  19. 一个奇怪的方法解决华为ENSP模拟器路由器启动后命令行一直“#”的问题
  20. 在同一台机运行多个mysql 服务 多个主/从在同一主机_在同一台机运行多个Mysql 服务 多个主/从在同一主机...

热门文章

  1. 硬盘健康状态、温度、通电次数、写入量和序列号检查软件
  2. 怎么查看linux服务器品牌,怎么查看Linux服务器硬件信息,这些命令告诉你
  3. 飞控FirmamentAutopilot介绍
  4. C语言中“.”与-的区别
  5. 关于植物大战僵尸如何更改关卡与金币
  6. 记录:微信小程序Switch样式调整
  7. 为什么硬盘插在计算机上不显示,硬盘插在电脑上不显示怎么办
  8. 《雨霖铃·寒蝉凄切》 柳永
  9. 读书百客:《拟孙权答曹操书》赏析
  10. 各种FIFO硬件设计(FIFO概念、异步、同步、非2次幂深度FIFO)