Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 54

SignalR или websocket

05.11.2016, 12:38. Показов 8210. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задался целью прикрутить игру крестики нолики на свой сайт. Есть ли что то кроме SignalR в плане технологий?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.11.2016, 12:38
Ответы с готовыми решениями:

SignalR или ajax
что и где лучше использовать? Добавлено через 1 минуту сам считаю что аякс лучше там где пользователь сам тыкает, а сигналр там где...

SignalR или Web Api
Install-Package Gray.Microsoft.AspNetCore.SignalR.Server -Pre SignalR или Web Api Проблемы Я создавал проект на SignalR и выяснил...

Asp core 2 Signalr VS 2017 или о боже что куда зачем?
История такова, что пол года назад сидел на vs 2015 и простенький чатик работает просто на ура, дали задание на один день, решил сделать на...

21
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
19.11.2016, 01:09
Студворк — интернет-сервис помощи студентам
Serg1980, Чтобы вы не запутались, вот так примерно все должно быть, естественно ОЧЕНЬ много опустил для краткости и понятности:


СЕРВЕР

C#
1
2
3
4
5
6
//координата
public class Location
{
    public int X { get; set; }
    public int Y { get; set; }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//игрок на сервере, может иметь поля с куками или другой конфиденциальной информацией
public class Player
{
    public Player(string connectionId, string name, string photoPath)
    {
        ConnectionId = connectionId;
        Name = name;
        PhotoPath = photoPath;
    }
 
    public string ConnectionId { get; set; }
    public string Name { get; set; }
    public Location Location { get; set; }
    public string PhotoPath { get; set; }
}
 
//DTO-объект для информирования о подключении игрока на клиенте
public class InfoPlayerDTO
{
    public string ConnectionId { get; set; }
    public string Name { get; set; }
}
 
//DTO-объект для рисования чего-то на клиенте
public class DrawingObjectDTO
{
    public Location Location { get; set; }
    public string ImagePath { get; set; }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//игра (серверная часть)
public class Game
{
    List<Player> players = new List<Player>();
 
    public IEnumerable<Player> GetPlayers()
    {
        return players;
    }
 
    public IEnumerable<Player> GetPlayers(Func<Player, bool> predicate)
    {
        return players.Where(predicate);
    }
 
    public void AddPlayer(Player player)
    {
        players.Add(player);
    }
 
    public IEnumerable<string> GetPlayerConnectionIds()
    {
        return GetPlayers().Select(p => p.ConnectionId);
    }
 
    public IEnumerable<string> GetPlayerConnectionIds(Func<Player, bool> predicate)
    {
        return GetPlayers(predicate).Select(p => p.ConnectionId);
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//хаб игры
public class GameHub : Hub
{
    private static Game game = new Game();
    private static GameBroadcaster broadcaster = new GameBroadcaster();
 
    public void ConnectPlayer(string name)
    {
        Player player = new Player(Context.ConnectionId, name, "path");
        game.AddPlayer(player);
 
        InfoPlayerDTO infoPlayerDTO = AutoMapper.Mapper.Map<Player, InfoPlayerDTO>(player);
        DrawingObjectDTO drawingObjectDTO = AutoMapper.Mapper.Map<Player, DrawingObjectDTO>(player);
 
        broadcaster.AddPlayerToClientsTable(game, infoPlayerDTO);
        broadcaster.CreateDrawingObject(game, drawingObjectDTO);
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//"оповещатель" игроков
public class GameBroadcaster
{
    private IHubContext context = GlobalHost.ConnectionManager.GetHubContext<GameHub>(); 
 
    public void AddPlayerToClientsTable(Game game, InfoPlayerDTO player)
    {
        IEnumerable<string> connectionIds = game.GetPlayerConnectionIds();
        context.Clients.Clients(connectionIds).addPlayerToClientsTable(player);
    }
    public void CreateDrawingObject(Game game, DrawingObjectDTO drawingObject)
    {
        IEnumerable<string> connectionIds = game.GetPlayerConnectionIds();
        context.Clients.Clients(connectionIds).createDrawingObject(drawingObject);
    }
    
}

Клиент
//здесь для понятности опустил моменты по сериализации DTO-объекта в нужный тип
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function ClientServerComunication(gameViewModel, gameGraphicEngine)
{
    var self = this;
    this.gameViewModel = gameViewModel;
    this.gameGraphicEngine = gameGraphicEngine;
 
    var gameHubProxy = $.connection.gameHub;
   
    gameHubProxy.client.addPlayerToClientsTable = function (player) {
        self.gameViewModel.addPlayer(player);
    };
 
    gameHubProxy.client.drawPlayer= function (drawingObject) {
        self.gameGraphicEngine.createDrawingObject(drawingObject);
    };
 
    $.connection.hub.start().done(function () {
         self.connectPlayer("name");
    });
}
 
ClientServerComunication.prototype.connectPlayer = function(name)
{
    this.gameHubProxy.server.connectPlayer(name);
}
Здесь может быть Angular или Knockout, знаю только последний его и описал
Может использоваться для отображения какой-либо информации в html
JavaScript
1
2
3
4
5
6
7
8
9
function GameViewModel()
{
    this.players = ko.observableArray([]);
}
 
GameViewModel.prototype.addPlayer = function(player)
{
    this.players.push(player);
}
Графический движок для рисования игры
Собственно и нужен для рисования
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function GameGraphics()
{
    this.graphicsEngine = new ENGINE() //здесь может быть канвас, three.js, любой движок для отрисовки
    this.drawingObjects = [];
}
 
GameGraphicEngine.prototype.createDrawingObject = function(drawingObject)
{
    //у объекта имеются координата и фото для отрисовки (по сути это уже не игрок, а просто объект)
    this.drawingObjects.push(drawingObject);
}
2
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 54
19.11.2016, 11:35  [ТС]
Спасибо за совет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2016, 11:35
Помогаю со студенческими работами здесь

WebSocket или Socket IO
Я хочу написать чат на сайте и для меня трудный выбор. В чем отличие и преимущества Socket IO и WebSocket.

MVP + Websocket + Flowable или?
В presenter подключаюсь к Websocket (библиотекой) и в методе onMessage получаю непрерывный поток данных (котировки) в виде json, не могу...

Что выбрать websocket или httpclient?
Здравствуйте форумчане) Возник небольшой вопрос так как на эту тему я не компетентен. Вообщем у меня есть программа которая посылает...

Написать приложение-чат, используя websockets и одну из библиотек (Fleck или websocket-sharp)
Здравствуйте! Пытаюсь написать приложение-чат, используя websockets и одну из библиотек (Fleck или websocket-sharp). До этого ни с ASP.NET,...

SignalR
Всем привет. Ребят, нужна помощь, я не могу понять в чем дело. Пишу программу (что-то на подобие чата) с помощью библиотеки SignalR. У...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru