Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Где лучше хранить данные для разных потоков / 16 сообщений из 16, страница 1 из 1
22.06.2015, 23:28
    #38990190
Manonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
И снова здравствуйте ))

Подскажите плиз, где можно хранить данные, которые используются разными потоками ? С браузера приходит ajax запрос, нужно считать данные, которые на сервере записал куда то веб сокет клиент к другому серваку. Application не подходит, т.к. веб сокеты фигачатся в отдельном потоке, там вообще нет HttpContext'а.
...
Рейтинг: 0 / 0
22.06.2015, 23:34
    #38990196
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Manonia,

непонятно, какова связь меджду аякс запросом и вебсокетклиентом
...
Рейтинг: 0 / 0
22.06.2015, 23:36
    #38990199
Manonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
смотрите: то, что вебсокет клиент на сервере пишет данные куда-то, которые потом ajax запросом должны считаться, ну или просто реквестом.
...
Рейтинг: 0 / 0
22.06.2015, 23:39
    #38990202
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Manonia,

неясно как конкретный аякс запрос должен ассоциироваться с запросом вебсокетного клиента.
...
Рейтинг: 0 / 0
22.06.2015, 23:41
    #38990203
Manonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
то. что приходит по веб сокетам будет ложится в очередь, которую как раз и нужно потом достать для ajax запроса.
...
Рейтинг: 0 / 0
22.06.2015, 23:43
    #38990205
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Manonia,

неясного много,
но очередь вполне можно держать в Application
...
Рейтинг: 0 / 0
22.06.2015, 23:55
    #38990211
Manonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Изопропил, можно, но я не могу получить доступ к Application:
HttpContext.Current.Application, Current=null, потому что веб совет ответ фигачится в потоке, которые никакого отношения не имеет к HttpContext. http://stackoverflow.com/questions/19509672/why-httpcontext-current-be-null
...
Рейтинг: 0 / 0
23.06.2015, 00:24
    #38990219
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Manonia,

а кто стартует поток с вебсокет-клиентом?

если из Application_Start() запускать - этот поток получит доступ к Application без проблем
...
Рейтинг: 0 / 0
23.06.2015, 09:28
    #38990323
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
эм а в чем проблема? есть потокобезопасные коллекции, сделал одну статическую, или просто кеш или бд на самый худой конец.
...
Рейтинг: 0 / 0
23.06.2015, 10:34
    #38990387
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
handmadeFromRu,

...а я бы даже сказал, что БД - не самый худой конец ...
...
Рейтинг: 0 / 0
23.06.2015, 11:45
    #38990483
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Manonia, а есть какие-то количественные характеристики?

Сколько ajax запросов в секунду, какое количество запросов на чтение к "очереди" каждый из них порождает?
Какое количество запросовна запись в секунду приходит от веб сокет клиента?
Веб сокет клиент один, или их может быть два, десять, сто?
...
Рейтинг: 0 / 0
23.06.2015, 12:49
    #38990572
Manonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Изопропил, я делаю конекшен в Application_Start. Но HttpContext.Current равно null, как я понимаю из-за того, что websocket_DataRecieved идет в отдельном потоке.

Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
protected void Application_Start(Object sender, EventArgs e)
{
     RegisterRoutes(RouteTable.Routes);

     WebSocketManager.OpenConnection();
}

public class WebSocketManager
    {
        private static WebSocket _webSocket;
        private static ConcurrentDictionary<long, List<InstanceState>> _statesQueue;

        public static void OpenConnection()
        {
            if (_webSocket != null && _webSocket.State == WebSocketState.Open)
            {
                return;
            }

            initWebSocketConnection();
        }

        private static void initWebSocketConnection()
        {
            _webSocket = new WebSocket("ws://localhost:8181");
            _webSocket.Opened += websocket_Opened;
            _webSocket.Error += websocket_Error;
            _webSocket.Closed += websocket_Closed;
            _webSocket.DataReceived += websocket_DataRecieved;

            _webSocket.Open();
        }

        private static void websocket_DataRecieved(object sender, DataReceivedEventArgs message)
        {
            try
            {                
                if (HttpContext.Current.ApplicationInstance.Application["test"] == null)
                {                   
                    HttpContext.Current.ApplicationInstance.Application["test"] = "";
                }          
            }
            catch (Exception e)
            {
                
            }
        }
...
Рейтинг: 0 / 0
23.06.2015, 12:56
    #38990580
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
ManoniaНо HttpContext.Current равно null,
конечно.
А зачем в контексте сохранять данные?

обработчик аякс-запроса пусть обращается к WebSocketManager


или мы все дружно чего-то недопонимаем?
...
Рейтинг: 0 / 0
23.06.2015, 13:28
    #38990611
Manonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
1. На старте приложения загружаются данные в Application["HierarchyData"] из БД.
2. Дальше по вебсокетам с другого сервера приходят обновления определннных полей, их нужно
a. обновить в Application["HierarchyData"].
b. положить в очередь, чтобы потом забрал клиент, так как у него уже есть отрисованная HierarchyData.
Проблема получается с a, т.к. не могу доступ к Application получить.
...
Рейтинг: 0 / 0
23.06.2015, 21:17
    #38991076
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Manonia1. На старте приложения загружаются данные в Application["HierarchyData"] из БД.
2. Дальше по вебсокетам с другого сервера приходят обновления определннных полей, их нужно
a. обновить в Application["HierarchyData"].
b. положить в очередь, чтобы потом забрал клиент, так как у него уже есть отрисованная HierarchyData.
Проблема получается с a, т.к. не могу доступ к Application получить.А в БД при этом не надо обновлять данные что-ли? Странно как-то.

Почему бы не писать в БД + очередь держать в памяти WebSocketManager, как предложил Изопропил?
...
Рейтинг: 0 / 0
23.06.2015, 22:49
    #38991131
Manonia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где лучше хранить данные для разных потоков
Нет, я БД нет этих полей. Я думаю все можно хранить в статических полях.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Где лучше хранить данные для разных потоков / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]