【问题标题】:RMI Service run similar to socketsRMI 服务运行类似于套接字
【发布时间】:2019-09-19 22:41:07
【问题描述】:

所以如果我有一个套接字服务器,我可以接受每个套接字并将其传递给一个执行程序

while(true){
            Socket conn = socketServ.accept();
            Runnable task = new Runnable() {
                @Override
                public void run() {
                    try{
                        server.executor(conn);
                    } catch(IOException e){

                    }
                }
            };
            exec1.execute(task);
        }

这样做可以让我的服务器在我的线程上运行并且不会阻塞同一个线程。因为我还引用了那个名为“conn”的套接字,所以我也可以成功返回消息。

现在我有了一个 RMI 接口,基本上可以让我来回调用方法。

例如,如果我有这个方法:

public MusicServerResponseImpl CreatePlayerlist(String Name, UserObjectImpl uo) throws RemoteException {
        MusicServerResponseImpl res = new MusicServerResponseImpl();



        return res;
    }

返回一个可序列化的对象。我担心的是当这条消息被调用时,我认为它将在服务器的主线程中被调用,因此会阻塞该线程并减慢并行性。

我认为解决方案是让每个 RMI 方法也为执行程序创建一个任务..以加快所有内容的执行...但是我看到的这个问题与我有一个对象的套接字不同要将信息发送回,我不确定如何从 RMI 方法返回响应,而不必以某种方式阻塞线程。

这有意义吗?基本上我是在问我如何才能与 RMI 方法并行执行,同时仍然能够返回结果!

感谢您的帮助!

【问题讨论】:

    标签: java sockets networking parallel-processing rmi


    【解决方案1】:

    这有意义吗?

    没有。原生支持并发调用。

    查看this documentation page 并查找名为maxConnectionThreads 的属性。

    您还可以通过例如在服务器代码中打印当前线程名称并尝试执行并发调用并查看会发生什么来测试您的假设。

    【讨论】:

    • 好吧..没有意识到这一点。我想这会让我的生活更轻松。所以你说的原生它会运行多线程
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2013-08-18
    • 2012-03-02
    • 2010-10-02
    • 1970-01-01
    • 2012-12-22
    相关资源
    最近更新 更多