gpt4 book ai didi

java - 向多个客户端广播对象

转载 作者:行者123 更新时间:2023-12-01 12:50:44 25 4
gpt4 key购买 nike

目前,我尝试实现服务器/客户端 - 应用程序并遇到问题,但找不到解决方案。

我正在运行一个服务器,它正在等待客户端登录,将它们添加到cachedThreadPool并启动一个新的Runnable 对于每个客户端,处理他们各自的请求等。

现在这些请求有一些答案,这些答案必须在服务器处理完后广播。

        this.mOos = new ObjectOutputStream(this.mSocket.getOutputStream());
this.mOos.flush();
this.mOis = new ObjectInputStream(this.mSocket.getInputStream());

while(true)
{
Object o = this.mOis.readObject();

if(o !=null && this.mInputList.size() < 20)
{
this.mInputList.add(o);
}

if(!this.mInputList.isEmpty())
{
handleIncomingObject();
}

if(!this.mOutputList.isEmpty())
{
try
{
this.mOos.writeObject(this.mOutputList.remove(0));
this.mOos.flush();
this.mOos.reset();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

现在我遇到的问题是,当我处理请求时:

handleIncomingObject();

需要广播。

我的方法是在创建可运行对象时提供对 ExecutorService 对象的引用,以便能够访问不同线程中的线程池。

正如您所见,每个客户都有自己的

LinkedList<Object> mInputList
LinkedList<Object> mOutputList

缓冲传入和传出的消息。

handleIncomingObject()中,我想做一些类似的事情:

//assume exec as ExecutorService
for(Thread t : exec)
{
mOutputList.add(new Message(message));
}

预先感谢任何帮助或建议。

你好,本。

最佳答案

使用包含所有客户端的 Vector 并迭代此 Vector 来发送广播消息。您可以使用如下方法:

public static synchronized void broadcast(Message msg) {
for(Client c : vector) {
c.mOutputList.add(msg);
}
}

关于java - 向多个客户端广播对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com