簡體   English   中英

如何在Azure功能應用程序中使用SignalR?

[英]How to use SignalR in an Azure function app?

我正在構建一個小型游戲,一方面使用SignalR,另一方面使用Azure功能應用程序。 基本上,用戶與服務器建立Web套接字連接並從其發送/接收消息。 這主要是通過這種方式完成的,因為玩家可以實時地相互討論。

此外,我想要一些運行和執行一些指令的Azure功能應用程序。 例如,每分鍾,一個應用程序會讓一些怪物移動。 如果這些怪物圍繞特定的玩家,我希望他知道。

為此,我有兩個解決方案:

  • 每秒從客戶端請求信息,然后警告用戶是否需要。
  • 從我的功能應用程序中打開與Web套接字的連接以發送數據,集線器會將信息轉發給受影響的用戶。

第一種選擇是打敗了我的網絡套接字的目的。 如果我需要輪詢服務器以獲取某些信息,那么擁有Web套接字有什么意義呢。

第二個選項似乎更好,但由於我還不熟悉功能應用程序,我想知道它是否可行。 從功能應用程序打開Web套接字連接是否可能/正確?

也許有更好的選擇?

例如,每分鍾,一個應用程序會讓一些怪物移動。 如果這些怪物圍繞特定的玩家,我希望他知道。

如果您想從Azure功能應用程序中調用hub方法向特定玩家廣播怪物位置信息,您可以參考以下可以正常使用的示例。

Hub類

public class ChatHub : Hub
{       

    public void BroadcastMonstersPosition(string MonsterPositionInfo)
    {
        Clients.All.addNewMessageToPage(MonsterPositionInfo);
    }

    //other hub methods
}  

Azure Functions應用程序(timerTrigger)

using System;


public static void Run(TimerInfo myTimer, TraceWriter log)
{
    var hub = new Microsoft.AspNet.SignalR.Client.HubConnection("http://xxxxxx.azurewebsites.net/signalr/hubs");

    var proxy = hub.CreateHubProxy("ChatHub");
    hub.Start().Wait();

    //invoke hub method
    proxy.Invoke("BroadcastMonstersPosition", "new position info");
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
}

function.json

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */1 * * * *"
    }
  ],
  "disabled": false
}

project.json

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.AspNet.SignalR.Client": "2.2.0"
      }
    }
   }
}

客戶端用戶可以接收Azure Functions應用程序發送的消息

在此輸入圖像描述

此外,如果您想要向特定玩家而不是所有連接玩家廣播,您可以參考以下代碼。

Clients.Clients(clientids_list).addNewMessageToPage(MonsterPositionInfo);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM