WebSocket示例java的比较少,大部分是nodejs的,比较有名的是socket.io的chat,

借用下他的前端实现一套java的,后端基于https://github.com/generallycloud/baseio实现的WebSocket编写,

直接上代码:

public void accept(Session session, ReadFuture future) throws Exception {

        if (future instanceof HttpReadFuture) {
super.accept(session, future);
return;
} WebSocketReadFuture f = (WebSocketReadFuture) future; // CLOSE
if (f.getType() == 8) { msgAdapter.removeClient(session); JSONObject obj = new JSONObject(); obj.put("username", session.getAttribute("username"));
obj.put("numUsers", msgAdapter.getClientSize());
obj.put("action", "user-left"); String msg1 = obj.toJSONString(); msgAdapter.sendMsg(msg1); } else { // String msg = getMsg(session, ); String msg = f.getData().toString(Encoding.UTF8); JSONObject obj = JSONObject.parseObject(msg); String action = obj.getString("action"); if("new-message".equals(action)){ obj.put("username", session.getAttribute("username")); String msg1 = obj.toJSONString(); msgAdapter.sendMsg(msg1); }else if("add-user".equals(action)){ msgAdapter.addClient(session); String username = (String)session.getAttribute("username"); if(username != null){
return;
} username = obj.getString("username"); session.setAttribute("username", username); obj.put("numUsers", msgAdapter.getClientSize());
obj.put("action", "login"); String msg1 = obj.toJSONString(); WebSocketReadFutureImpl f2 = new WebSocketTextReadFutureImpl();
f2.write(msg1);
session.flush(f2); obj.put("username", username);
obj.put("action", "user-joined"); String msg2 = obj.toJSONString(); msgAdapter.sendMsg(msg2); }else if("typing".equals(action)){ obj.put("username", session.getAttribute("username")); String msg1 = obj.toJSONString(); msgAdapter.sendMsg(msg1); }else if("stop-typing".equals(action)){ obj.put("username", session.getAttribute("username")); String msg1 = obj.toJSONString(); msgAdapter.sendMsg(msg1); }else if("disconnect".equals(action)){ msgAdapter.removeClient(session); obj.put("username", session.getAttribute("username"));
obj.put("numUsers", msgAdapter.getClientSize());
obj.put("action", "user-left"); String msg1 = obj.toJSONString(); msgAdapter.sendMsg(msg1);
}else{ f.write("no action matched:"+action); session.flush(f);
}
}
}

演示地址:https://www.generallycloud.com/web-socket/chat/index.html

文章来自:http://www.cnblogs.com/gifisan/p/5946297.html

[已解决][HTML5]基于WebSocket开发聊天室应用的更多相关文章

  1. [已解决][HTML5]基于WebSocket开发小蝌蚪应用

    前端时间在网上看到别人用WebSocket开发的小蝌蚪应用很炫酷,不过是php,于是想着用java也实现一套, 找到前端 https://github.com/danielmahal/Rumpetro ...

  2. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  3. 基于WebSocket实现聊天室(Node)

    基于WebSocket实现聊天室(Node) WebSocket是基于TCP的长连接通信协议,服务端可以主动向前端传递数据,相比比AJAX轮询服务器,WebSocket采用监听的方式,减轻了服务器压力 ...

  4. 第一节:.Net版基于WebSocket的聊天室样例

    一. 说在前面的话 该篇文章为实时通讯系列的第一节,基于WebSocket编写了一个简易版聊天样例,主要作用是为引出后面SignalR系列的用法及其强大方便之处,通过这个样例与后续的SignalR对比 ...

  5. 基于webSocket的聊天室

    前言 不知大家在平时的需求中有没有遇到需要实时处理信息的情况,如站内信,订阅,聊天之类的.在这之前我们通常想到的方法一般都是采用轮训的方式每隔一定的时间向服务器发送请求从而获得最新的数据,但这样会浪费 ...

  6. WebSocket 网页聊天室

    先给大家开一个原始的websocket的连接使用范例 <?php /* * recv是从套接口接收数据,也就是拿过来,但是不知道是什么 * read是读取拿过来的数据,就是要知道recv过来的是 ...

  7. websocket+golang聊天室

    原文地址: http://www.niu12.com/article/3 websocket+golang聊天室 main.go和index.html放在同一目录下 main.go package m ...

  8. 基于websocket vue 聊天demo 解决方案

    基于websocket vue 聊天demo 解决方案 demo 背景 电商后台管理的客服 相关技术 vuex axios vue websocket 聊天几种模型 一对一模型 一对一 消息只一个客户 ...

  9. 关于websocket制作聊天室的的一些总结

    websocket的总结 在一个聊天室系统中,常常使用websocket作为通信的主要方式.参考地址:https://www.jianshu.com/p/00e... 关于自己的看法:websocke ...

随机推荐

  1. jQuery 实时监听<input>输入值的变化

    这方法比 on('keydown') 更实时 <input type='text' id='input1'/>$(document).ready(function(){ $('#input ...

  2. ORM系列之二:EF(2)Code First

    目录 1. Code First是什么? 2. Code First 简单示例 3. 数据存储 4. 迁移 Code First是什么 Code First 顾名思义就是先写代码,当然不是乱写,而是按 ...

  3. 使用PowerShell解三道测试开发笔试题

    在网上看到了三道测试开发的笔试题,答案是用Python解的.这段时间正好在学PowerShell,练习一下:) 1. 验证邮箱格式 2. 获取URL的后缀名 3. 获取前一天时间或前一秒 我的解法是: ...

  4. 安装springboot时遇到 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.问题

    将工程外部jar包删除slf4j就可以运行.

  5. Oracle实战训练——ATM取款机业务

    ATM取款机的数据库模拟开发和实战总结 一.ATM实战开发的简介. 学习了几天的Oracle,开始着手用数据库PL/SQL语言做一个简单的ATM取款机业务,主要是为了巩固数据库的知识,并非真正的去实现 ...

  6. 两个有意思的模式在ECMAScript中的实现

    简介 本篇文章对设计模式进行了筛选, 只列举两个有意思(坑)的设计实现, 如有错误愿闻其详. 构造函数 ECMAScript中的构造函数和其他语言的有那么点特别之处,可以认为, 一个函数, 如果被以n ...

  7. 启用CentOS6.5 64位安装时自带的MySQL数据库服务器

    本人在虚拟机上又安装了一台linux机器,作为MySQL数据库服务器用,在安装时选择了系统自带的MySQL服务器端,以下是启用步骤. 首先开启mysqld服务 #service mysqld star ...

  8. 让超出父视图范围的子视图响应事件,在UIView范围外响应点击

    /** *  在父视图中重写该方法,这样可使超出部分响应事件. */ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {  ...

  9. C++学习笔记 知识集锦(一)

    1.内存管理的开销 2.函数调用框架 3.类为什么要定义在头文件 4.C++的组合 5.在类的外部定义成员函数 6.bool类型为什么可以当做int类型 7.无符号保留原则 8.C++类型检查 9.何 ...

  10. C++学习笔记 指针与引用

    指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...