写一个Tomcat+Okhttp实现的聊天websocket聊天框架(二)--完成私聊功能
2017-04-06 23:33
357 查看
上一篇中,完成了客户端和服务端的网络,算一个helloworld。只是,服务端使用的是Tomcat给的例子,客户每发一条消息,都会广播到每一个在线的用户。如果我们在撩妹子的时候,还要广播到正牌女友那里,这就尴尬了,显然不符合正常的业务需求,当做一个群聊或许还可以。
下面我们就通过修改服务端的代码,来实现一对一的功能。从上一节中ChatAnnotation这个类中,我们可以知道,所有与服务器保持连接的客户端,都有一个静态Set集合中保存的ChatAnnotation对象。而发消息的时候,通过遍历Set依次发送,那么我们就找到突破口了。如果每一个被保存的对象,都保持唯一的标识(这个标识可以是用户的id),另外一个用户想和他私聊时,通过这个id找到对应的ChatAnnotation对象,再进行发送消息,就完成聊天的功能了。这种键值对的存储,我们使用HashTable来说代替Set。
我们键值对的关系是 id->session,这是因为在OnOpen中药拿到ID还需要获得Websocket握手时的Request对象, 在这里为了开发方便,在客户端中中将己方id,对方id拼接到消息里,再通过编写Utils方法,解析到对应的数据。
下面我们就通过修改服务端的代码,来实现一对一的功能。从上一节中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<>();
@OnMessage public 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(); } }
相关文章推荐
- 写一个Tomcat+Okhttp实现的聊天websocket聊天框架(一)-- 完成客户端和服务端的通信
- 在Spring Boot框架下使用WebSocket实现聊天功能
- springboot整合tomcat自带的websocket实现在线聊天及象棋网页对战功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 在Spring Boot框架下使用WebSocket实现聊天功能
- SpringBoot+Websocket实现一个简单的网页聊天功能代码
- 在Spring Boot框架下使用WebSocket实现聊天功能
- Alpaca-Laravel 框架(二) --- 集成GateWay实现WebSocket功能-聊天功能示例
- 在Spring Boot框架下使用WebSocket实现聊天功能
- 基于Java Socket实现一个简易在线聊天功能(一)
- 在Java7与Tomcat8环境下使用WebSocket实现聊天的示例
- 最近做了一个类似社交的网站,看到新浪微博右侧有一个网页在线聊天的功能,如何才能实现网页在线聊天功能(新浪微博这种聊天)?
- 一个使用监听器模式实现的J2ME网络编程框架,包括一个简单的登录功能实现(含源代码)
- javaweb webSocket 实现简单的点对点聊天功能
- HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
- 一个实例演示jersey框架实现RESTful风格的Webservice,并发布到Tomcat,以及客户端调用示范
- javaweb webSocket 实现简单的点对点聊天功能