2017-08-07 14 views
5

मैं एक छोटा सा गेम बना रहा हूं जिसे एक तरफ सिग्नलआर का उपयोग करके वेब सॉकेट द्वारा संचालित किया जाएगा और दूसरी ओर एज़ूर फ़ंक्शन ऐप का उपयोग किया जाएगा। असल में, उपयोगकर्ता सर्वर के साथ एक वेब सॉकेट कनेक्शन स्थापित करता है और उससे संदेश भेजता/प्राप्त करता है। यह मुख्य रूप से इस तरह से किया जाता है क्योंकि खिलाड़ी वास्तविक समय में एक दूसरे के साथ चर्चा कर सकते हैं।Azure फ़ंक्शन ऐप और सिग्नलआर

इसके अलावा, मैं कुछ एज़ूर फ़ंक्शन ऐप्स रखना चाहता हूं जो कुछ निर्देश चलाते हैं और निष्पादित करते हैं। उदाहरण के लिए, हर मिनट, एक ऐप कुछ राक्षसों को स्थानांतरित करेगा। यदि ये राक्षस एक विशिष्ट खिलाड़ी के आसपास हैं, तो मैं उन्हें जानना चाहता हूं।

  • जानकारी का अनुरोध ग्राहक से हर दूसरे और फिर उपयोगकर्ता चेतावनी अगर वह होने की जरूरत है:

    कि के लिए, मेरे मन में दो समाधान है।

  • डेटा और हब भेजने के लिए मेरे फ़ंक्शन ऐप के भीतर से मेरी वेब सॉकेट से कनेक्शन खोलना प्रभावित उपयोगकर्ताओं को जानकारी अग्रेषित करेगा।

पहला विकल्प प्रकार मुझे वेब सॉकेट के उद्देश्य को हराने का मौका देता है। यदि मुझे कुछ जानकारी के लिए सर्वर को पूल करने की आवश्यकता है तो वेब सॉकेट होने का क्या मतलब है।

दूसरा विकल्प बेहतर लगता है लेकिन जैसा कि मैं अभी तक फ़ंक्शन ऐप्स से परिचित नहीं हूं, मुझे आश्चर्य है कि यह जाने का तरीका है या नहीं। क्या फ़ंक्शन ऐप से वेब सॉकेट कनेक्शन खोलना संभव/सही है?

शायद कुछ बेहतर विकल्प हैं?

उत्तर

11

उदाहरण के लिए, हर मिनट, एक ऐप कुछ राक्षसों को स्थानांतरित करेगा। यदि ये राक्षस एक विशिष्ट खिलाड़ी के आसपास हैं, तो मैं उन्हें जानना चाहता हूं।

यदि आप विशिष्ट खिलाड़ियों को राक्षसों की स्थिति जानकारी प्रसारित करने के लिए अपने एज़ूर फ़ंक्शंस ऐप से हब विधि कॉल करना चाहते हैं, तो आप मेरे पक्ष में ठीक काम करने वाले निम्नलिखित नमूने का उल्लेख कर सकते हैं।

हब वर्ग

public class ChatHub : Hub 
{  

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

    //other hub methods 
} 

Azure कार्य एप्लिकेशन (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

संबंधित मुद्दे