Я использую асинхронный сервер сокетов в моем проекте 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;
}
}
}