30411


ネットワーク上のノードを表すオブジェクトに，メソッド呼び出しでアクセスするようなコードの書き方はありませんでしょうか？

例えば，Python で書くと，

[code]

    class Node:
        def __init__(self, ip, port):
            self.ip = ip
            self.port = port
            self.hoge = 'hogehoge'
    
        def do_something(self):
            n = Node('127.0.0.1', 12345)
            self.hoge = n.get_hoge()
    
        def get_hoge():
            return self.hoge
    
[/code]

Java で書くなら，

[code]

    class Node {
        private String ip;
        private int port;
        private String hoge;
    
        public Node(String ip, int port) {
            this.ip = ip;
            this.port = port;
            this.hoge = "hogehoge";
        }
    
        public doSomething() {
            Node n = new Node('127.0.0.1', 12345);
            this.hoge = n.getHoge();
        }
    
        public getHoge() {
            return this.hoge;
        }
    }
    
[/code]

このような書き方ができるクラスを作りたいです．  
要するに，相互に通信を行う `Node` クラスからソケット API のコードを隠蔽したいということです．

言語は問いません．  
何かいい書き方はありませんでしょうか？  
また，不可能なら不可能と教えていただけると助かります．  
よろしくお願いします．


CC BY-SA 3.0
2016-11-15T04:01:45.913
30409
2016-11-15T15:46:41.187
2016-11-15T04:37:22.433
3132
3132
question
java ruby python c++ network
ネットワーク上のノードを表すオブジェクトにメソッド呼び出しでアクセスしたい


ネットワーク越しのメソッド呼び出しのことを「RPC」、それをオブジェクト指向にしたものを「分散オブジェクト」といいます。古くはCORBA、WindowsならDCOM、JavaならJavaRMIなどがあります。それ以上のことは私は詳しくありません。「分散オブジェクト
｛言語名｝」等で検索してみるといいでしょう。

私見ですが、最近そういうのはあまり流行っていないような気がします。なんでもHTTPリクエストのAPIで片付けてしまうような。

その手のライブラリは、登場しては消えていく、を繰り返していて、これと言って定着しているものが、ほとんど無いような印象です。


CC BY-SA 3.0
2016-11-15T04:51:41.930
30411
2016-11-15T11:05:49.570
2016-11-15T11:05:49.570
3337
3337
30409
answer


Pythonでしたら標準ライブラリの SimpleXMLRPCServer を使用してXML-RPC サーバーを実装してみてはどうでしょうか。

<http://docs.python.jp/2/library/simplexmlrpcserver.html#simplexmlrpcserver-
example>


CC BY-SA 3.0
2016-11-15T14:41:19.400
30427
2016-11-15T14:41:19.400
5375
30409
answer


Ruby の場合は、標準ライブラリの dRuby
を使うと、ネットワークの向こうにあるオブジェクトのメソッドを普通のオブジェクトのメソッド呼び出しのように使うことができます。

<https://docs.ruby-lang.org/ja/2.3.0/library/drb.html>

<http://dev.classmethod.jp/server-side/ruby-on-
rails/druby_distributed_object_other_procerss/>


CC BY-SA 3.0
2016-11-15T15:46:41.187
30429
2016-11-15T15:46:41.187
3249
30409
answer