V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
raysonx
V2EX  ›  分享创造

开源+分享一个自己做的基于 JSON-RPC over netlink socket 的跨进程通信库

  •  1
     
  •   raysonx ·
    vfreex · 2016-10-22 00:11:08 +08:00 · 2199 次点击
    这是一个创建于 2963 天前的主题,其中的信息可能已经有所发展或是发生改变。

    语言: Python ,支持 Python 2.6 - 3.X

    平台: Posix

    特色:

    1. API 使用简单。
    2. 不用像 Unix domain socket 那样需要共享文件系统,只需要知道对方的 nlpid 就可以通信。而且多对多通信不需要为每个通信方创建 socket ,只需要一个就可以(类似于 UDP ,支持迭代服务器模型)。
    3. 可以跨 Linux 的 network namespaces ,只要你在调用 unshare 之前先创建好 netlink socket 就可以。
    import unittest
    import os
    from procslink import RPCPeer
    
    
    class HelloWorldTestCase(unittest.TestCase):
        def test_hello_world(self):
            pid = os.fork()
            if pid == 0:
                class MyAPI(object):
                    def hello(self, name):
                        s = "Hello, %s!" % name
                        print(s)
                        return s
                rpc_server = RPCPeer()
                print("Server's nl_pid is %s." % rpc_server.nl_pid)
                rpc_server.register_functions_in_object(MyAPI())
                rpc_server.run_server_forever()
            else:
                rpc_client = RPCPeer()
                rpc_client.talk_to(pid).hello("Rayson Zhu")
                os.wait4(pid, 0)
    

    GitHub 地址: https://github.com/vfreex/procslink

    许可证: MIT

    Pip 安装:

    sudo pip install procslink
    
    5 条回复    2016-10-22 13:12:39 +08:00
    raysonx
        1
    raysonx  
    OP
       2016-10-22 00:13:04 +08:00
    取自自己和朋友做的另一个项目的一个模块,可能还不太完善,但基本功能都有了。目前没有原生提供认证功能,使用时注意安全。
    raysonx
        2
    raysonx  
    OP
       2016-10-22 00:18:01 +08:00
    README.md 中描述了通信协议的细节、目录结构和使用示例。
    kongkongyzt
        3
    kongkongyzt  
       2016-10-22 01:21:48 +08:00 via Android
    有个困惑,如果 rpc server 重启导致 nlpid 发生改变,那么 rpc client 也需要修改 nlpid ?
    ldbC5uTBj11yaeh5
        4
    ldbC5uTBj11yaeh5  
       2016-10-22 01:28:22 +08:00 via Android
    有点意思,和 erlang 的跨机通信接口像极了。顶一个。
    raysonx
        5
    raysonx  
    OP
       2016-10-22 13:12:39 +08:00 via iPad
    @kongkongyzt nlpid 可以自己指定,如果不指定的话,会由内核自动选择。如果一个进程只绑定一个 nlpid 的话, nlpid 等于进程 pid 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5973 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:27 · PVG 14:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.