我已經構建了一個託管遊戲服務器的應用程序,並且希望添加一個用於外部控制的web API。該應用程序目前只是一個控制檯應用程序,但最終將成爲一個Windows服務。我已經添加了Web API並能夠響應請求。我還在控制檯應用程序中添加了TcpServer,在Web API中添加了TcpClient以允許Web API將命令發送到控制檯應用程序。如何通過web api實現服務交互
但是,由於Web API由託管遊戲服務器的同一控制檯應用程序託管,有沒有一種方法可以將命令從Web API控制器類直接發送到遊戲服務器主機類?目前,它看起來是這樣的(以下簡稱爲節省空間,普通TCP代碼):
public class GameServiceManager
{
private IDisposable _restApi;
GameServer _gameServer;
public void StartService(NameValueCollection appSettings)
{
_restApi = WebApp.Start<MyHttpHostController>(url: restApiUrl);
_gameServer = new GameServer();
// also starts TCP Server stuff to receive command
}
}
public class MyHttpHostController
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{action}/{id}",
defaults: new { controller = "RestApi", id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
public class RestApiController : ApiController
{
[HttpGet]
public IHttpActionResult resetGameServer()
{
// creates TCP Client to send command
return Ok();
}
}
的GameServiceManager在控制檯應用程序實例化,然後調用StartService()。在其他應用程序中,我使用Events在父類和子類之間來回傳遞命令,但我似乎沒有太多的控制web api部分的東西。
你可以有你的遊戲服務器靜態和訪問它從你的Web API? – StfBln
我不這麼認爲,但我不確定。它必須跟蹤幾個子進程並保持兩個其他外部API之間的同步。 – Cam
您是否在使用命名管道進行通信? – NPhillips