我需要有一个能够在客户端调用函数的服务器。我总是在不同的网络游戏 API 中使用 RPC,但我从来没有自己实现过。
我该怎么做?
我天真的方法是:
将客户端连接到服务器:
服务器
fn update_position_client(){
unique_id = 1;
send.to_client(unique_id);
}
客户
while recv_messages {
if id == 1
update_position();
}
我会这样做吗?
我需要有一个能够在客户端调用函数的服务器。我总是在不同的网络游戏 API 中使用 RPC,但我从来没有自己实现过。
我该怎么做?
我天真的方法是:
将客户端连接到服务器:
服务器
fn update_position_client(){
unique_id = 1;
send.to_client(unique_id);
}
客户
while recv_messages {
if id == 1
update_position();
}
我会这样做吗?
如果您只有几条要发送的消息,并且数据基本已知,则此方法有效。为了更加健壮,您希望能够动态添加/删除可以调用的消息,并弄清楚如何在调用 RPC 时查找要调用的方法。
假设您希望这对用户完全透明,在这种情况下通常发生的情况是,当发送消息时,RPC 库将等待,直到有响应返回。假设具有双向功能,通常情况下只有一个线程来监听数据。如果一个 RPC 消息进来,这个线程将弄清楚如何处理该消息,即在您的(本地)地址空间中调用什么方法以及使用什么参数来调用它。当您发送 RPC 消息时,您发送消息的线程被阻塞(可能带有信号量),直到返回消息返回,此时您的本地线程被解除阻塞并允许继续。
您可以查看的特定于 Linux 的 RPC 库是 DBus。