需求是一个socket服务器,多个客户端与之连接,其中一种客户端可以选取在线的另一种客户端向其发送信息,也就是类似私聊的socket转发服务器。
问题在怎么获取指定的socket线程这里,并没有方法可以通知指定线程。。

解决方案 »

  1.   

    把想建立联系的客户端B的IP信息给客户端A,让他们私聊,你不负责维护这个通信过程。
    另一种方法是所有的客户端都和服务器通信,服务器负责把消息进行对应转发,这会有一个性能问题,服务器的通信压力会比较大,容易成为最大在线人数上线的瓶颈
      

  2.   

    问题比较好解决
    服务端:
    1.服务端用一个Map保存“在线的用户”,键——用户的名称(不容许重复);值——当前用户对应socket对象的outputStream对象(printStream);这里用outPutStream主要原因是服务端主要是将信息发送给对应的用户。
    2.服务端为每一个联通的客户端(socket对象)开通一条线程,这条线程绑定的任务是——获得当前客户端的用户名,若符合条件(不重复)则加入到Map中(我们可以认为这个Map就是一个聊天室,map中的一个成员就是一个用户);获得当前客户端发送过来的信息,进行判断是公聊还是私聊,若是私聊则将信息发送到指定的用户,若是公聊则在当前“聊天室”内的所有“用户”都将受到信息。
    3.服务端怎么判断是公聊还是私聊?
    这就是一个简单协议上的问题了,这里很简单,若发送过来的信息包括字符"@"和":"则认为是私聊,其规则如下:
    @用户名:聊天的内容(这个你可以自己定义)
      

  3.   

    用xmpp服务器+客户端自己扩展吧 
    服务器端可以使用openfire  /tigase 
    客户端可以基于spark 包二次开发