[已解决][HTML5]基于WebSocket开发聊天室应用
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开发聊天室应用的更多相关文章
- [已解决][HTML5]基于WebSocket开发小蝌蚪应用
前端时间在网上看到别人用WebSocket开发的小蝌蚪应用很炫酷,不过是php,于是想着用java也实现一套, 找到前端 https://github.com/danielmahal/Rumpetro ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 基于WebSocket实现聊天室(Node)
基于WebSocket实现聊天室(Node) WebSocket是基于TCP的长连接通信协议,服务端可以主动向前端传递数据,相比比AJAX轮询服务器,WebSocket采用监听的方式,减轻了服务器压力 ...
- 第一节:.Net版基于WebSocket的聊天室样例
一. 说在前面的话 该篇文章为实时通讯系列的第一节,基于WebSocket编写了一个简易版聊天样例,主要作用是为引出后面SignalR系列的用法及其强大方便之处,通过这个样例与后续的SignalR对比 ...
- 基于webSocket的聊天室
前言 不知大家在平时的需求中有没有遇到需要实时处理信息的情况,如站内信,订阅,聊天之类的.在这之前我们通常想到的方法一般都是采用轮训的方式每隔一定的时间向服务器发送请求从而获得最新的数据,但这样会浪费 ...
- WebSocket 网页聊天室
先给大家开一个原始的websocket的连接使用范例 <?php /* * recv是从套接口接收数据,也就是拿过来,但是不知道是什么 * read是读取拿过来的数据,就是要知道recv过来的是 ...
- websocket+golang聊天室
原文地址: http://www.niu12.com/article/3 websocket+golang聊天室 main.go和index.html放在同一目录下 main.go package m ...
- 基于websocket vue 聊天demo 解决方案
基于websocket vue 聊天demo 解决方案 demo 背景 电商后台管理的客服 相关技术 vuex axios vue websocket 聊天几种模型 一对一模型 一对一 消息只一个客户 ...
- 关于websocket制作聊天室的的一些总结
websocket的总结 在一个聊天室系统中,常常使用websocket作为通信的主要方式.参考地址:https://www.jianshu.com/p/00e... 关于自己的看法:websocke ...
随机推荐
- windows计划任务+批处理文件实现oracle数据库的定时备份与恢复
1. 备份: PS:2014-1-15 如果导出的dmp数据文件不大的话,就直接每天导出好了,不要只保存七天的数据.然后顶起通过winrar对文件进行打包,我发现dmp文件的压缩包还是很高的. 那么 ...
- 不小心删除了sysWOW64下的webio.dll
weibo的桌面客户端留了一个服务,在syswow64目录下留了个exe文件,看着旁边好像还有个weibo.dll,就把试着也删除了,但是删除不掉,我就进安全模式删除了(f8在Windows的启动界面 ...
- JavaScript自学之数组排序
<html> <head> <title>数组排序</title> <script type="text/javascript" ...
- EJB之Timer
EJB Timer 要么: Annotation @Schedule 或者方法前声明@Timeout 要么: 在部署描述中定义timeout-method 如果是使用@Schedule, Timer在 ...
- 数值分析之QR因子分解篇
在数值线性代数中,QR因子分解的思想比其他所有算法的思想更为重要[1]. --Lloyd N. Trefethen & ...
- SQL update join on 连接更新
http:/how-can-i-do-an-update-statement-with-join-in-sql create table sale ( id int, udid int, assid ...
- 关于apache做301的问题
http://www.internetmarketingninjas.com/blog/search-engine-optimization/301-redirects/ RedirectMatch ...
- awk的数组使用经历
背景:之前是一个数学妞,所以操作系统类的就由windows系列霸占了,甚至“cmd"是什么东西,环境变量是什么概念......其实说那么多就是想表明一点:你现在很有可能比我知道得多得多呢! ...
- Android出现java.net.SocketException: Permission denied报错
是由于权限问题导致的,在manifests中找到AndroidManifest.xml 在manifest节点下新增 <uses-permission android:name="an ...
- 偶遇到 java.util.ConcurrentModificationException 的异常
今天在调试程序 遇到了如此问题 贴上代码来看看稍后分析 List<String> list = null;boolean isUpdate = false;try { list = JSO ...