需求是一个socket服务器,多个客户端与之连接,其中一种客户端可以选取在线的另一种客户端向其发送信息,也就是类似私聊的socket转发服务器。
问题在怎么获取指定的socket线程这里,并没有方法可以通知指定线程。。
问题在怎么获取指定的socket线程这里,并没有方法可以通知指定线程。。
解决方案 »
- 记事本文件菜单中“另存为”这段代码怎么写?求解!!!
- java:如何在600*300的JPanel上画50万个点
- 问Ganymed SSH-2 协议实现包 一个使用问题,能解决给300分
- 为什么线条的位置改变后重画以前的线条依然显示在窗体上?
- 必须要自己写函数对字符串数组中的字符串排序啊?有没有现成的函数?
- 关于对象序列化的问题
- 希望各位前辈不要因为是菜问题就不 赐教!谢谢!
- 已经编译好的类必须放到bin目录下才能运行吗?
- 怎样在java里执行一个外部的程序
- ****** iplanet在solaris上的安装和启动故障,我无法解决!帮忙看看吧
- 新手小白求教个关于socket被shutdown的问题
- java中关于二维码的部分
另一种方法是所有的客户端都和服务器通信,服务器负责把消息进行对应转发,这会有一个性能问题,服务器的通信压力会比较大,容易成为最大在线人数上线的瓶颈
服务端:
1.服务端用一个Map保存“在线的用户”,键——用户的名称(不容许重复);值——当前用户对应socket对象的outputStream对象(printStream);这里用outPutStream主要原因是服务端主要是将信息发送给对应的用户。
2.服务端为每一个联通的客户端(socket对象)开通一条线程,这条线程绑定的任务是——获得当前客户端的用户名,若符合条件(不重复)则加入到Map中(我们可以认为这个Map就是一个聊天室,map中的一个成员就是一个用户);获得当前客户端发送过来的信息,进行判断是公聊还是私聊,若是私聊则将信息发送到指定的用户,若是公聊则在当前“聊天室”内的所有“用户”都将受到信息。
3.服务端怎么判断是公聊还是私聊?
这就是一个简单协议上的问题了,这里很简单,若发送过来的信息包括字符"@"和":"则认为是私聊,其规则如下:
@用户名:聊天的内容(这个你可以自己定义)
服务器端可以使用openfire /tigase
客户端可以基于spark 包二次开发