你可以用@Zuuum所說的做數據庫,但我用不同的方式實現它。
我在Windows Azure的環境中使用ASP.NET MVC與PokeIn和EF:
我用這個模式來進行所有的實時需要在我的遊戲網站(在遊戲中做的動作,動作等),我不我不想在這裏做廣告,如果你願意的話,你可以通過我找到它。
所以每個人都得到通過PokeIn它們的更新,甚至誰調用的行動,使每一個客戶的行爲相同的用戶,我總是使用這種模式爲全雙工通信解決方案。所以,當有人呼叫動作不會返回除了成功的信號,任何東西。
下一個例子是行不通的,因爲他們只是來證明流動
這裏片斷是從我的代碼的動作片段:
[HttpPost]
[UnitOfWork]
[RestrictToAjax]
[ValidateAntiForgeryToken]
public JsonResult Post(SendMessageViewModel msg)
{
if (ModelState.IsValid)
{
var chatMessage = new ChatMessage
{
ContainerType = msg.ContainerType,
ContainerID = msg.ContainerID,
Message = _xssEncoder.Encode(msg.Message),
User = _profileService.CurrentUser
};
_chatRepository.AddMessage(chatMessage);
OnSuccessfulUoW =() => EventBroker.Current.Send(this, new ChatMessageSentPayload(chatMessage));
}
return Json(Constants.AjaxOk);
}
而且(簡體)EventBroker實施:
public class UnityEventBroker : EventBroker
{
private readonly IUnityContainer _container;
public UnityEventBroker(IUnityContainer container)
{
_container = container;
}
public override void Send<TPayload>(object sender, TPayload payload)
{
var subscribers = _container.ResolveAll<IEventSubscriber<TPayload>>();
if (subscribers == null) return;
foreach (var subscriber in subscribers)
{
subscriber.Receive(sender, payload);
}
}
}
而更簡化的訂戶:
public class ChatMessageSentSubscriber : IEventSubscriber<ChatMessageSentPayload>
{
public void Receive(object sender, ChatMessageSentPayload payload)
{
var message = payload.Message;
var content = SiteContent.Global;
var clients = Client.GetClients(c => c.ContentID == message.ContainerID && c.Content == content)
.Select(c => c.ClientID)
.ToArray();
var dto = ObjectMapper.Current.Map<ChatMessage, ChatMessageSentDto>(message);
var json = PokeIn.JSON.Method("pokein", dto);
CometWorker.SendToClients(clients, json);
}
}
感謝您的信息。關於數據事件的變化,是否還有一種方法可以檢測天藍色表中檢測到的數據變化? – starcorn
沒有。也許你應該在另一個問題上提出這個問題。 (用於Azuretable的類似SQLDependency解決方案等) – Zuuum