`
idning
  • 浏览: 139491 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

随机聊天

阅读更多

最近流行omegle,我也做了一个:

地址:http://hdc1112.appspot.com/client/client.html

核心代码:

package hust.ning;

import hust.ning.jdo.DAO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.logging.Logger;


public class ChatApp {
	private static final Logger log = Logger.getLogger(ChatApp.class.getName());
	private static ChatApp instance = null;
	
	private ChatApp (){
//		new Timer().schedule(new TimerTask(){
//			@Override
//			public void run() {
//				checkTimeOut();				
//			}
//		}, 60*1000,60*1000);//60s,不准我用Timer,我在adduser达到1000的时候check。
	}
	
	private void checkTimeOut()
	{
		log.info("checkTimeOut");
		for(String k :activity.keySet())
		{
			if (!activity.get(k))
				logout(k);
			else 
				activity.put(k, false);
		}
	}
	public static ChatApp getInstance()
	{
		if (instance==null)
			instance=new ChatApp();
		return instance;
	}
	private static int i = DAO.getUserCount();
	private String genUUID()
	{
		return UUID.randomUUID().toString()+"_U"+i++;
	}
	public int getUserCount()
	{
		return i;
	}
	public int getCurrentUserCount()
	{
		if (singleUser==null)
			return p2pmap.size();
		else 
			return p2pmap.size()+1;
	}
	
	private Map<String,String> p2pmap = new HashMap<String, String>();
	
	/**
	 * UserID -> content的map.
	 */
	private Map<String,List<String>> contents =new HashMap<String, List<String>>();
	private Map<String ,Integer> counter = new HashMap<String, Integer>();//用于超时管理
	private Map<String ,Boolean> activity = new HashMap<String, Boolean>();//用于超时管理。
	private String singleUser;
	
	public String getSingleUser ()
	{
		return singleUser;
	}
	public synchronized String login()
	{
		String id = this.genUUID();
		counter.put(id, 0);
		activity.put(id, true);
		log.info("USER LOGIN:"+id);
		DAO.saveChat(id, "SYSTEM:LOGIN");
		if (null == singleUser)
		{
			singleUser=id;
			return id;
		}
		log.info("PUT user to map :"+id +"<->"+ singleUser);
		p2pmap.put(id, singleUser);
		p2pmap.put(singleUser, id);
		singleUser=null;
		if (i%1024==0)
			checkTimeOut();
		return id;
	}
	

 	public /*synchronized */void addChat(String uid,String content)
	{
		if (!p2pmap.containsKey(uid))
			return ;//one of the peer is offline.

 		counter.put(uid, 0);//清零。
		log.info(""+uid+":"+content);
		DAO.saveChat(uid, content);
		if (!contents.containsKey(uid))
			contents.put(uid, new ArrayList<String>());
		contents.get(uid).add(content);
	}
	public /*synchronized */List <String> getChat(String uid){
		if (!activity.containsKey(uid))
			return null;//null表示已经logout.
		activity.put(uid, true);
		int x = counter.get(uid);
		if (x>20)//如果收到100个getNotification而没有一个addChat(),认为用户断线。
		{
			logout(uid);
			return null;
		}
		counter.put(uid, x+1);
		
		if (!p2pmap.containsKey(uid))
			return null;//one of the peer is offline.
		
		String peer= p2pmap.get(uid);
		List <String >rst = contents.get(peer);
		if (rst==null)
			rst= new ArrayList<String>();
//		log.info(":::"+rst);
		
		contents.remove(peer);
		return rst;
	}
	public void logout(String uid)
	{
		if (null!=p2pmap.get(uid))
			logout2(p2pmap.get(uid));
		logout2(uid);
	}
	private void logout2(String uid)
	{
		log.info("USER LOGOUT:"+uid );
		if (uid==null)
			return ;
		DAO.saveChat(uid, "SYSTEM:LOGOUT");
		if (uid.equals(singleUser))
			singleUser=null;
		
		p2pmap.remove(uid);
		counter.remove(uid);
		contents.remove(uid);
		activity.remove(uid);
	}
}
 

欢迎讨论。

 

GAE 没法支持comet,

不过现在了解到comet这样的技术,以后做类似项目的时候可以用了。

  • 大小: 16.5 KB
7
2
分享到:
评论
5 楼 idning 2009-04-28  
alang 写道

hust  华科大的?

ye
4 楼 tf03172003 2009-04-28  
OMEGLE没用过,感觉应该是打发时间的吧
3 楼 alang 2009-04-26  
hust  华科大的?
2 楼 javacto 2009-04-24  
楼主加油 @!!
1 楼 cqllang 2009-04-24  
学习一下。。楼主继续

相关推荐

    一款很不错的在线随机聊天视频

    【标题】:“一款很不错的在线随机聊天视频” 这款软件的核心在于提供在线随机视频聊天功能,让用户能够轻松地与全球各地的陌生人进行即时交流。在线随机聊天视频作为一种新兴的社交方式,打破了地域限制,使得人们...

    陌生人随机聊天室系统在线匿名聊天系统.rar_gay匿名聊天_gay匿名聊天室_匿名聊天室gay_聊天室_随机陌生人聊

    PHP的陌生人随机聊天室系统在线匿名聊天系统

    路过随机聊天web

    【路过随机聊天Web】是一个基于Web的在线交流平台,它为用户提供了一个随机匹配、即时聊天的环境。这个项目的核心在于其随机性和互动性,让用户能够快速地与世界各地的人建立联系,进行无拘无束的交谈。通过这个平台...

    访omegle的在线随机聊天系统

    在线随机聊天系统是一种基于互联网的社交工具,它允许用户与全球各地的陌生人进行实时交流,无需预先注册或添加好友。访omegle的在线随机聊天系统是这样一种实现,它结合了前端的jQuery技术和后端的Servlet来搭建。...

    遇聊一对一随机聊天网站程序 v2.1.zip

    遇聊对一随机聊天系统是一个类似chatroulette.com的在线匿名聊天系统。免费开源,任意使用。   功能: 1.匿名用户配对聊天 2.聊天记录可以下载 3.可以显示对方输入状态 4.采用轮询服务器方式传输数据,相比...

    luguo视频随机聊天源码(附测试地址)

    【luguo视频随机聊天源码】是一个创新的在线社交应用,其核心功能是提供匿名的、基于视频的随机聊天体验。这种模式与知名的Omegle类似,用户无需透露自己的真实身份,可以与全球范围内的另一位陌生人进行即时视频...

    仿对对碰视频随机聊天程序

    【标题】"仿对对碰视频随机聊天程序"是一个基于网络的实时视频交流平台,它模仿了著名的在线随机聊天服务OmeGLE。该程序旨在提供一个互动的、匿名的环境,让用户可以与世界各地的陌生人进行视频聊天。通过这种方式,...

    一对一随机聊天系统 1.0.zip

    一对一随机聊天系统是一个类似chatroulette.com的在线匿名聊天系统。免费开源,任意使用。 功能: 1.匿名用户配对聊天 2.聊天记录可以下载 3.可以显示对方输入状态 4.采用轮询服务器方式传输数据,相比comet...

    随机聊天系统

    1.匿名用户配对聊天 2.聊天记录可以下载 3.可以显示对方输入状态 4.采用轮询服务器方式传输数据,相比comet方式,服务器压力小许多,而且轮询间隔时间可以调节。 5.显示在线人数 6.敏感词屏蔽 7.基于ip地址的地理...

    Web聊天室 基于jQuery新皮肤随机聊天功能.zip

    【标题】"Web聊天室 基于jQuery新皮肤随机聊天功能" 提示我们这个项目是关于构建一个网络聊天室的,它利用了jQuery库来实现动态交互,并且具有随机切换皮肤的功能。jQuery是一个广泛使用的JavaScript库,它简化了...

    滚聊网随机聊天整站源码 v2.0.rar

    "滚聊网随机聊天整站源码 v2.0.rar" 是一款专为国内用户设计的在线随机视频聊天平台的源代码,它基于国外聊天轮盘的模式进行开发,提供了丰富的社交互动体验。该源码的版本号为2.0,相较于之前的版本,它包含了新的...

    Android开源项目 陌客随机聊天

    【Android开源项目 陌客随机聊天】是一款基于Android平台的社交应用,允许用户与全球各地的陌生人进行匿名随机聊天。这个开源项目对于开发者来说是一个很好的学习资源,它展示了如何实现即时通讯功能,以及如何设计...

    陌客随机聊天源码.zip

    陌客随机聊天源码是一个基于Android 2.2系统的应用程序示例,主要功能可能是实现陌生人之间的随机通话或聊天。在Android开发中,这样的应用通常涉及到网络通信、数据加密、用户界面设计以及隐私保护等多个关键知识点...

    一对一随机聊天系统.7z

    一对一随机聊天系统是一种在线社交平台,它允许用户与全球范围内的其他用户进行实时、私密的一对一交流。这样的系统通常包含多个关键组件和技术,包括用户注册与验证、匹配算法、实时通信、安全性与隐私保护等。下面...

    基于PHP的陌生人随机聊天室 php版.zip

    【标题】"基于PHP的陌生人随机聊天室"是一款利用PHP编程语言实现的在线聊天系统,专为用户提供一个与不相识的人进行随机交流的平台。它可能包含基础的用户注册、登录功能,以及实时消息传递机制,使用户可以即时与...

    基于PHP的陌生人随机聊天室php版源码.zip

    【标题】"基于PHP的陌生人随机聊天室php版源码.zip"揭示了这是一个使用PHP编程语言构建的在线聊天室系统,特别强调了“陌生人”和“随机”两个特性,意味着用户可以与网络上的随机陌生人进行即时交流。这个系统可能...

    PHP实例开发源码-陌生人随机聊天室 php版.zip

    在本项目中,"PHP实例开发源码-陌生人随机聊天室 php版.zip" 提供了一个基于PHP语言实现的在线陌生人随机聊天室的源代码。这个系统允许用户与全球的其他在线用户进行匿名交流,增加了社交的趣味性和互动性。下面我们...

    PHP实例开发源码—陌生人随机聊天室 php版.zip

    【PHP实例开发源码—陌生人随机聊天室 php版.zip】是一个基于PHP编程语言实现的在线聊天室项目。这个项目提供了一个平台,使得用户可以与网络上的陌生人进行随机的即时聊天,增强了社交互动性。通过分析这个项目,...

    《魔镜在线》 一个随机聊天网站源码,有配套的VB做的客户端

    《魔镜在线》是一个随机聊天网站的源码,它提供了用户之间进行实时交流的平台。这个项目使用PHP作为后端编程语言,与MySQL数据库结合,实现了动态数据存储和处理功能。PHP是一种广泛应用的服务器端脚本语言,尤其...

Global site tag (gtag.js) - Google Analytics