egmkang 服务端开发工程师

orleans开篇

2016-08-24
C#

今天, 终于看完orleans两个sample, 一个最简单的HelloWorld, 一个略微复杂的TicTacToe.

看的过程也在思考, 为什么API设计成这样:

//这里是API
public interface IGameGrain : IGrainWithGuidKey
{
  // add a player into a game
  Task<GameState> AddPlayerToGame(Guid player);
  Task<GameState> GetState();
  Task<List<GameMove>> GetMoves();
  Task<GameState> MakeMove(GameMove move);
  Task<GameSummary> GetSummary(Guid player);
  Task SetName(string name);
}

//这里是使用
public async Task<ActionResult> CreateGame()
{
  var guid = GetGuid();
  var player = GrainClient.GrainFactory.GetGrain<IPlayerGrain>(guid);
  var gameIdTask = await player.CreateGame();
  return Json(new { GameId = gameIdTask }, JsonRequestBehavior.AllowGet);
}

以前用C++写服务器的时候, 找到了那个对象, 基本上就可以直接调用函数, 或者访问数据成员. 但是这个API, 所有的都是返回Task<T>.

刚才想通了, 我关心的这个player有可能不在同一个进程内, 我基本上就不太可能直接访问到他的成员/数据. 所以只能通过调用函数, 而这个函数, 实际上是发送消息, 然后由不知道哪个进程处理了, 然后返回给我.

函数调用的过程, 实际上发送消息和处理消息的过程.

以上, 作为学习orleans的开始!


Similar Posts

下一篇 Grain的属性

Comments