SignalR должен ориентироваться на конкретные игры с Game ID, а не на все живые игры

Я отправил запрос pull (доступен в Ansible 2.2+), который упростит эти ситуации, добавив поддержку запроса jmespath в Ansible. В вашем случае это будет работать так:

- debug: msg="{{ addresses | json_query(\"private_man[?type=='fixed'].addr\") }}"

вернется:

ok: [localhost] => {
    "msg": [
        "172.16.1.100"
    ]
}

0
задан Mike Flynn 13 July 2018 в 22:44
поделиться

1 ответ

Я предлагаю использовать либо идентификатор соединения, связанный с каждым подключением к концентратору, либо создание групп. Примечание. Каждый GameID должен иметь свое собственное соединение с концентратором, чтобы использовать решение Id соединения.

Я предпочитаю использовать группы из личного опыта, но в любом случае это можно сделать.

public async void setGroup(string groupName){
    await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
}

Чтобы создать группу в концентраторе, вам нужно будет создать метод в вашем классе хабов.

public async void setGroup(string groupName){
    await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
}

Во-вторых, вам понадобится JS-функция на стороне клиента для вызова функции-концентратора.

$.connection.hub.invoke("setGroup", groupName).catch(err => console.error(err.toString()));

В вашем случае вы можете поместить свой gameID в качестве groupname, а затем вызвать GlobalHost.ConnectionManager.GetHubContext<GameCastHub>().Clients.Groups(gameID).receiveUpdates(Newtonsoft.Json.JsonConvert.SerializeObject(model));

. Чтобы получить идентификатор соединения:

var _connectionId = $.connection.hub.id;

Затем отправьте идентификатор соединения на сервер и перейдите к использованию вызова GlobalHost.ConnectionManager.GetHubContext<GameCastHub>().Clients.Clients.Client(_connectionId).receiveUpdates(Newtonsoft.Json.JsonConvert.SerializeObject(model)); для вызова этого конкретного соединения.

0
ответ дан Mike 17 August 2018 в 12:06
поделиться