写一个Tomcat+Okhttp实现的聊天websocket聊天框架(二)--完成私聊功能
来源:互联网 发布:ubuntu 运行c 编辑:程序博客网 时间:2024/06/03 11:01
上一篇中,完成了客户端和服务端的网络,算一个helloworld。只是,服务端使用的是Tomcat给的例子,客户每发一条消息,都会广播到每一个在线的用户。如果我们在撩妹子的时候,还要广播到正牌女友那里,这就尴尬了,显然不符合正常的业务需求,当做一个群聊或许还可以。
下面我们就通过修改服务端的代码,来实现一对一的功能。从上一节中ChatAnnotation这个类中,我们可以知道,所有与服务器保持连接的客户端,都有一个静态Set集合中保存的ChatAnnotation对象。而发消息的时候,通过遍历Set依次发送,那么我们就找到突破口了。如果每一个被保存的对象,都保持唯一的标识(这个标识可以是用户的id),另外一个用户想和他私聊时,通过这个id找到对应的ChatAnnotation对象,再进行发送消息,就完成聊天的功能了。这种键值对的存储,我们使用HashTable来说代替Set。
我们键值对的关系是 id->session,这是因为在OnOpen中药拿到ID还需要获得Websocket握手时的Request对象, 在这里为了开发方便,在客户端中中将己方id,对方id拼接到消息里,再通过编写Utils方法,解析到对应的数据。
private static final Map<String,Session> map=new Hashtable<>();
@OnMessagepublic void onMessage(String message){String myId=Utils.getMyId(message);this.myId=myId;Session session;if((session=map.get(myId))==null){map.put(myId, this.session);}String herId=Utils.getHerId(message);try {if((session=map.get(herId))==null){this.session.getBasicRemote().sendText(herId+" is not online");return;}session.getBasicRemote().sendText(myId+" said: "+Utils.getMessage(message));} catch (IOException e) {e.printStackTrace();}}
0 0
- 写一个Tomcat+Okhttp实现的聊天websocket聊天框架(二)--完成私聊功能
- 写一个Tomcat+Okhttp实现的聊天websocket聊天框架(一)-- 完成客户端和服务端的通信
- websocket(聊天功能)
- SpringBoot WebSocket 实现简单的聊天功能
- Netty 实现 WebSocket 聊天功能
- Netty 实现 WebSocket 聊天功能
- Netty 实现 WebSocket 聊天功能
- Netty 实现 WebSocket 聊天功能
- Netty 实现 WebSocket 聊天功能
- Netty 实现 WebSocket 聊天功能
- Netty 实现 WebSocket 聊天功能
- Netty 实现 WebSocket 聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- red5聊天功能--私聊的实现
- 图像特征提取
- UVA 10791
- CTF-练习平台 Web writeup By Assassin [暂时完结]
- 【转载】Java中的数据存储(堆、栈、常量池)
- CN和CNTK的介绍(一)
- 写一个Tomcat+Okhttp实现的聊天websocket聊天框架(二)--完成私聊功能
- leetcode 44. Wildcard Matching
- xampp下mysql解决中文乱码问题
- cas4.2.7定制登录页面样式(并且让页面默认使用中文提示)
- 哈夫曼编码
- 简单排序算法时间空间复杂度分析及应用(1)-冒泡排序
- 线程安全
- c++指针的一些陷阱(更新ing)
- thinkphp部署到Linux后验证码功能不显示