2017-08-07 38 views
5

我正在构建一款小型游戏,一方面使用SignalR,另一方面使用Azure功能应用程序使用Web套接字驱动。基本上,用户建立与服务器的Web套接字连接并从中发送/接收消息。这主要是这样做的,因为玩家可以实时地彼此讨论。Azure函数应用程序和SignalR

此外,我想有一些运行并执行一些指令的Azure函数应用程序。例如,每分钟,一个应用程序会让一些怪物移动。如果这些怪物在某个特定的玩家身边,我想让他知道。

对于这一点,我心里有两个解决方案:

  • 请求的信息,从客户端每秒,然后警告用户,如果他需要。
  • 从我的功能应用程序中打开到我的网络套接字的连接以发送数据,集线器会将信息转发给受影响的用户。

第一种选择类型的击败web套接字的目的给我。如果我需要为服务器提供一些信息,那么使用Web套接字有什么意义。

第二个选择似乎更好,但由于我对功能应用程序还不熟悉,所以我想知道是否应该走这条路。从功能应用程序打开一个Web套接字连接是否可以/正确?

也许有更好的选择吗?

回答

11

例如,每分钟,一个应用程序会让一些怪物移动。如果这些怪物在某个特定的玩家身边,我想让他知道。

如果你想从你的Azure的功能的应用程序调用枢纽方法广播怪物特定玩家位置信息,可以参考下面的示例是在我身边工作正常。

集线器类

public class ChatHub : Hub 
{  

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

    //other hub methods 
} 

天青功能的应用程序(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的功能的应用程序发送

enter image description here

此外,如果你想播放特定的球员,而不是所有连接的球员,你可以参考下面的代码。

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

好吧,看起来这完全是我所需要的!非常感谢 ;-) – ssougnez

相关问题