【问题标题】:Broadcasting Objects to multiple clients向多个客户端广播对象
【发布时间】:2014-06-15 12:48:00
【问题描述】:

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

我正在运行一个Server,它正在等待Clients 登录,将它们添加到cachedThreadPool 并为每个Client 启动一个新的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));
}

提前感谢任何帮助或建议。

你好,本。

【问题讨论】:

    标签: java broadcasting


    【解决方案1】:

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

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

    【讨论】:

    • Tyvm 对于这个建议,尽管当我看到这种方法多么简单时我对自己很生气 ;-)
    猜你喜欢
    • 2017-04-12
    • 1970-01-01
    • 2016-12-02
    • 2019-04-01
    • 2015-07-03
    • 2012-01-23
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多