实现强大而高效的RPC系统

时间:2013-09-13 15:02:04

标签: networking rpc

我需要一台能够在客户端上调用功能的服务器。我总是在不同的网络游戏API中使用RPC,但我从未实现过它。

我该怎么做?

我天真的做法是:

将客户端连接到服务器:

服务器

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

客户端

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

这是我怎么做的?

1 个答案:

答案 0 :(得分:1)

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

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

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