Java 在即时消息应用程序中向特定线程/用户发送消息

Java 在即时消息应用程序中向特定线程/用户发送消息,java,Java,我目前正在用Java编写一个IM服务器,用于使用新的WebSocket协议的基于web的聊天应用程序。服务器当前侦听连接,并为每个处理输入和输出的连接客户端创建一个新线程。但是,我不知道如何在特定线程之间发送消息 我已经将它设置为基于web的客户端将用户ID发送到服务器的位置,并使用currentThread.setName()将该ID用作线程名称,但我不确定从哪里开始 我对Java只有大约3周的了解,所以我的问题的答案可能非常简单,或者我可能完全错了。我只需要往正确的方向推一下 谢谢 我认为你

我目前正在用Java编写一个IM服务器,用于使用新的WebSocket协议的基于web的聊天应用程序。服务器当前侦听连接,并为每个处理输入和输出的连接客户端创建一个新线程。但是,我不知道如何在特定线程之间发送消息

我已经将它设置为基于web的客户端将用户ID发送到服务器的位置,并使用
currentThread.setName()
将该ID用作线程名称,但我不确定从哪里开始

我对Java只有大约3周的了解,所以我的问题的答案可能非常简单,或者我可能完全错了。我只需要往正确的方向推一下


谢谢

我认为你不应该重新发明轮子,试着用它来实现聊天

你想发送什么样的消息?您可以尝试将线程存储在所有线程都可以访问的列表中,搜索要向其发送消息的线程,然后调用线程上的方法:

class MyThread extends Thread{
  private static List<MyThread> chatClients;

  public void run(){
    for (MyThread t : chatClients){
      if (...){
        t.sendMessage(...);
      }
    }
    //...
  }

  public void sendMessage(...){
    //...
  }
}
类MyThread扩展线程{
私有静态列表客户端;
公开募捐{
for(MyThread t:chatClients){
如果(…){
t、 发送消息(…);
}
}
//...
}
公共无效发送消息(…){
//...
}
}

还要注意的是,因为您处理的是线程,所以必须记住同步。

谢谢您的建议,我将查看JGroups,但这是一个项目,我这样做更多是为了学习,而不是为了任何事情,所以我不想依赖任何其他人的代码。谢谢您的回复。消息将只是字符串。你的解决方案肯定会奏效。但是,我可能只是有点偏执,在列表中循环是否是选择要向其传递数据的线程的最有效方式?不,你不是偏执,你是聪明的。:)根据你的情况,可能有更好的方法。我只想举一个例子,使用一个映射并键入您要发送消息的用户/客户端。