0

I need to have a server which is able to call functions on the client. I always used RPC's in different networking game API's but I never implemented it by myself.

How would I do it?

My naive approach would be:

connect client to the server:

server

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

client

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

Is this how I would do it?

4

1 に答える 1

1

これは、送信したいメッセージが数個しかなく、データが基本的にわかっている場合に機能します。より堅牢にするために、呼び出すことができるメッセージを動的に追加/削除する機能が必要であり、RPC が呼び出されたときに呼び出されるメソッドを検索する方法を理解する必要があります。

これがユーザーに対して完全に透過的であると仮定すると、この場合に通常発生することは、メッセージが送信されると、RPC ライブラリは応答が返されるまで待機することです。双方向機能を想定すると、通常は、データをリッスンする単一のスレッドが存在します。RPC メッセージが着信すると、このスレッドはメッセージをどう処理するか、つまり、(ローカル) アドレス空間でどのメソッドを呼び出すか、どのパラメーターを使用して呼び出すかを決定します。RPC メッセージを送信すると、メッセージを送信したスレッドは (おそらくセマフォで) ブロックされ、返信メッセージが戻ってくるまでブロックされます。その時点で、ローカル スレッドのブロックが解除され、続行が許可されます。

検討できる Linux 固有の RPC ライブラリは DBus です。

于 2013-09-13T21:09:59.703 に答える