【问题标题】:Implementing a robust and efficient RPC system实现一个健壮高效的 RPC 系统
【发布时间】:2013-09-18 07:53:01
【问题描述】:

我需要一个能够在客户端调用函数的服务器。我一直在不同的网络游戏 API 中使用 RPC,但我从来没有自己实现过。

我该怎么做?

我的幼稚做法是:

将客户端连接到服务器:

服务器

fn update_position_client(){
 unique_id = 1;
 send.to_client(unique_id);
}

客户

while recv_messages {
  if id == 1
    update_position();
}

我会这样做吗?

【问题讨论】:

  • 我会避免自己实现它,尤其是作为初学者!那东西很复杂,而且肯定有很多好的库。但也许你这样做只是为了好玩/学习,那么我想你自己做是有道理的。
  • @Jolta 我正在使用一种名为 Rust 的新语言,它不支持任何 RPC。我应该只包装一个 RPC c 库吗?如果是的话,你能推荐我吗?
  • 啊哈,那你这样做只是为了好玩。 ;-) 我没有太多的 C 网络编程经验,所以我将把它留给其他人。

标签: networking rpc


【解决方案1】:

如果您只有几条消息要发送,并且数据基本已知,则此方法有效。为了更加健壮,您需要能够动态添加/删除可以调用的消息,并弄清楚如何在调用 RPC 时查找要调用的方法。

假设您希望这对用户完全透明,在这种情况下通常发生的情况是,当发送消息时,RPC 库将等待,直到有响应返回。假设具有双向功能,通常情况下只有一个线程来监听数据。如果传入 RPC 消息,该线程将确定如何处理该消息,即在您的(本地)地址空间中调用什么方法以及使用什么参数调用它。当您发送 RPC 消息时,您发送消息的线程被阻塞(可能带有信号量),直到返回消息返回,此时您的本地线程被解除阻塞并允许继续。

您可以查看的特定于 Linux 的 RPC 库是 DBus。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多