java websocket实现即时聊天系统
即时聊天系统
后台代码
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实现即时聊天系统相关推荐
- WebSocket之仿QQWeb即时聊天系统(上)
1. 前言 Java web学完了,到了学期末,开始课设了,一共给了几个题目,大部分都是 JSP+servlet题目,当然我们也是主要学习的这些,一般都是什么什么管理系统,没啥意思,看到一个仿QQWe ...
- java即时聊天系统毕业_(完整版)基于Java即时聊天系统的设计与实现毕业论文设计...
目录 1 前言............................................................................................. ...
- WebSocket之仿QQWeb即时聊天系统(下)
1. 前言 上篇主要说了准备阶段和要学的基本知识,当然学的知识还是死的,还是要敲代码,下篇主要就是用上编学的知识实现本次课设任务 WebSocket之仿QQWeb即时聊天系统(上) WebSocket ...
- Java Websocket实例【服务端与客户端实现全双工通讯】
Java Websocket实例[服务端与客户端实现全双工通讯] 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP ...
- SpringCloud工作笔记060---SpringBoot中使用WebSocket实现即时通讯_实现呼叫中心业务封装
JAVA技术交流QQ群:170933152 ---------------我们主要用这个来转接,呼叫中心发过来的分机电话 呼叫中心:呼叫过程,首先呼叫中心运营商给个,api手册,api会规定,首先登陆 ...
- springboot框架下利用websocket实现即时通讯
springboot框架下利用websocket实现即时通讯(文章末尾有git项目打包文件,直接下载使用即可) 用websocket实现简单的在线聊天,先画个时序图,直观感受下流程 SystemCon ...
- 基于vert.x与webSocket的简单聊天系统
基于vert.x与webSocket的简单聊天系统 使用vert.x和webSocket的简单聊天实现 主要的verticle package com.zhku.analysis.service; / ...
- Java中的即时编译(Just-in-time compilation)
作者:知秋原文:http://t.cn/RYLPEMc 像其他一些编程语言一样,Java通常也被称为"编译语言".但有时你可能会感到困惑,尤其是当有人告诉你Java是JIT编译,并 ...
- java websocket 上传大文件,使用java websocket API和Javascript上传文件
我正在学习websocket并且已经使用websocket / json完成了聊天程序.但我坚持上传ATM的文件.任何建议&回答会很感激. 服务器端: package websocket; i ...
最新文章
- 系统架构设计的原则和模式
- 【算法】算法秋招个人总结
- InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor
- 三、mongodb数据库系列——mongodb和python交互 总结
- Android 7.0后 播放U盘中的视频文件的解决方案
- Eclipse 字体选择
- 谈谈对象和XML文件的转换
- 前端根据银行卡号或银行的简码动态显示logo图标
- windows 7 静默 安装 软件
- 苹果计算机 win10,图文教程!苹果电脑和WIN10的完美融合井井有条的美
- js 截取长图(html2canvas),并下载
- 扒皮 || 优衣库X KAWS凭什么会被疯抢??!!!
- C5750X7R2E105K230KA(电容器)MSP430F5249IRGCR微控制器资料
- java 导出word换行_POI写Word换行
- 水深6到9米有鱼吗_红黄尾鲴鱼钓法大全(附配方)
- 芯片破解、解密方法介绍
- PostgreSQL安装、验证安装、pgAdmin初步简单使用
- android连连看源代码,#经典连连看#源码分享
- 一个奇怪的方法解决华为ENSP模拟器路由器启动后命令行一直“#”的问题
- 在同一台机运行多个mysql 服务 多个主/从在同一主机_在同一台机运行多个Mysql 服务 多个主/从在同一主机...