2017-08-07 23 views
5

Tôi đang xây dựng một trò chơi nhỏ sẽ được điều khiển bởi ổ cắm web bằng SignalR trên một mặt và ứng dụng chức năng Azure mặt khác. Về cơ bản, người dùng thiết lập kết nối socket web với máy chủ và gửi/nhận tin nhắn từ nó. Điều này chủ yếu được thực hiện theo cách này bởi vì người chơi có thể thảo luận với nhau trong thời gian thực.Ứng dụng chức năng Azure và SignalR

Bên cạnh đó, tôi muốn có một số ứng dụng chức năng Azure chạy và thực hiện một số hướng dẫn. Ví dụ, mỗi phút, một ứng dụng sẽ làm cho một số quái vật di chuyển. Nếu những con quái vật xung quanh một người chơi cụ thể, tôi muốn anh ta biết.

Cho rằng, tôi có hai giải pháp trong tâm trí:

  • Yêu cầu thông tin mỗi giây từ khách hàng và sau đó cảnh báo người dùng nếu ông cần phải được.
  • Mở kết nối với ổ cắm web của tôi từ bên trong ứng dụng chức năng của tôi để gửi dữ liệu và trung tâm sẽ chuyển tiếp thông tin cho người dùng bị ảnh hưởng.

Loại tùy chọn đầu tiên đánh bại mục đích của ổ cắm web đối với tôi. Điểm của việc có ổ cắm web là gì nếu tôi cần phải nhóm máy chủ cho một số thông tin.

Tùy chọn thứ hai có vẻ tốt hơn nhưng vì tôi chưa quen với các ứng dụng chức năng, tôi tự hỏi nếu đó là cách để đi. Có thể/chính xác để mở một kết nối socket web từ một ứng dụng chức năng?

Có thể có một số tùy chọn tốt hơn?

Trả lời

11

Ví dụ: mỗi phút, một ứng dụng sẽ làm cho một số quái vật di chuyển. Nếu những con quái vật xung quanh một người chơi cụ thể, tôi muốn anh ta biết.

Nếu bạn muốn gọi phương thức trung tâm từ ứng dụng Azure Functions để phát sóng thông tin vị trí của quái vật đến người chơi cụ thể, bạn có thể tham khảo mẫu sau hoạt động tốt trên mặt của tôi.

lớp Hub

public class ChatHub : Hub 
{  

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

    //other hub methods 
} 

Azure Chức năng ứng dụng (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" 
     } 
    } 
    } 
} 

sử dụng khách hàng có thể nhận được thông báo rằng Azure Chức năng ứng dụng gửi

enter image description here

Bên cạnh đó, nếu bạn muốn quảng bá cho người chơi cụ thể thay vì tất cả người chơi kết nối, bạn có thể tham khảo mã sau đây.

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

Cũng tốt, có vẻ như đó là toàn bộ những gì tôi cần!Cảm ơn rất nhiều ;-) – ssougnez

Các vấn đề liên quan