c # сервер веб-сокетов не работает должным образом - PullRequest
0 голосов
/ 28 сентября 2018

Я использую асинхронный сервер сокетов в моем проекте c # для чтения тегов rfid.Сначала теги rfid читаются клиентским приложением и отправляют строку, содержащую подробности rfid, в мой контроллер сокетов.

Клиентское приложение генерирует очередь и отправляет строки в сокет. В моем контроллере сокета я читаю строку ивзять данные из базы данных и отправить модель результатов для концентратора.

Иногда мое клиентское приложение не отвечает за быстрое чтение тегов. Есть ли какие-либо изменения, которые я должен предпринять, чтобы ускорить мой сервер сокетов.

    public async Task ProcessWSChat(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;
            while (true)
            {
                ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                if (socket.State == WebSocketState.Open)
                {
                    DateTime currentDate = DateTime.Now;
                    string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    //userMessage = "Vehicle RFID No: " + userMessage + " passed at " + DateTime.Now.ToLongTimeString();
                    string[] subStrings = userMessage.Split('~');


                    #region Vehicle details

                    List<M999GET_RFID_PASSES_Result> rfidDetails = await GetRfidDetails(subStrings[2], subStrings[3]);

                    if (rfidDetails.Count() > 0)
                    {

                        string status = "null";
                        if (rfidDetails.FirstOrDefault().MRT_TAG_STATUS == 1)
                        {
                            status = "ACTIVE";
                        }
                        if (rfidDetails.FirstOrDefault().MRT_TAG_STATUS == 2)
                        {
                            status = "BLACKLIST";
                        }

                        //VHEDETAILViewModel testcus = new VHEDETAILViewModel
                        //{
                        //    VHE_CODE = "test",
                        //    VHE_NAME = vheDetails.FirstOrDefault().VHE_NAME,
                        //    VHE_RFID_TAG = subStrings[1],
                        //    DESCRIPTION = rfidDetails.FirstOrDefault().MTR_PERMIT_NO,
                        //    GATE_NAME = selectLocation.FirstOrDefault().LOCATION_NAME,
                        //    VHE_NO = rfidDetails.FirstOrDefault().MTR_IDENTIFICATION_NO,
                        //    VHE_TYPE = rfidDetails.FirstOrDefault().MRT_PASS_TYPE, //1- Toyota Vehicles 2-External Vehicles
                        //    CURRENT_DATETIME = currentDate,
                        //    STATUS = status,
                        //    PASSTYPE = rfidDetails.FirstOrDefault().MRT_PASS_TYPE.ToString()
                        //};

                        PermitDetailsHeader rfidDetail = new PermitDetailsHeader
                        {

                            PermitNo = rfidDetails.FirstOrDefault().MTR_PERMIT_NO,
                            IdentificationNo = rfidDetails.FirstOrDefault().MTR_IDENTIFICATION_NO,
                            CURRENT_DATETIME = currentDate,
                            Status = status,
                            passType = rfidDetails.FirstOrDefault().MRT_PASS_TYPE.ToString(),
                            tid = subStrings[2],
                            passId = rfidDetails.FirstOrDefault().MRT_PASS_ID,
                            readerIp = subStrings[3]
                        };

                        var subscribed = Hub.Clients.All;
                        subscribed.addItem(rfidDetail);

                        buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
                        await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                    }
                    #endregion
                }
                else
                {
                    break;
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...