Windows Azure是微軟的雲端運算平台!Windows Azure通過微軟的資料中心為開發人員提供以按需的計算能力和儲存能力去託管、擴充和管理互連網上的應用程式。
運行於Windows Azure上的應用程式具有很高的可靠性和延展性。
基於SuperSocket的伺服器程式可以輕易的運行於Windows Azure平台之上。
和普通Socket伺服器程式不同,首先需要在Role的屬性中設定Socket程式對外提供服務的Endpoint:
然後在WorkerRole代碼檔案中動態擷取外部Endpoint所對應的內部Endpoint:
var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[serverConfig.Name + "Endpoint"];
完整的代碼如下:
public override bool OnStart()
{
LogUtil.Setup();
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 100;
// For information on handling configuration changes
// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
var serverConfig = ConfigurationManager.GetSection("socketServer") as SocketServiceConfig;
if (!SocketServerManager.Initialize(serverConfig, ResolveServerConfig))
{
Trace.WriteLine("Failed to initialize SuperSocket!", "Error");
return false;
}
if (!SocketServerManager.Start())
{
Trace.WriteLine("Failed to start SuperSocket!", "Error");
return false;
}
return base.OnStart();
}
private IServerConfig ResolveServerConfig(IServerConfig serverConfig)
{
var config = new ServerConfig();
serverConfig.CopyPropertiesTo(config);
var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[serverConfig.Name + "Endpoint"];
if (instanceEndpoint == null)
{
Trace.WriteLine(string.Format("Failed to find Input Endpoint configuration {0}!", serverConfig.Name + "Endpoint"), "Error");
return serverConfig;
}
var ipEndpoint = instanceEndpoint.IPEndpoint;
config.Ip = ipEndpoint.Address.ToString();
config.Port = ipEndpoint.Port;
return config;
}
就這樣,你的SuperSocket伺服器程式就可以正確的運行在Windows Azure平台之上。
完整的範例程式碼,請參考原始碼中WindowsAzure檔案夾下的項目。