Я разработал async tcp server в .net 4.5. с шаблоном ожидания async с использованием этого Link, в настоящее время несколько клиентов одновременно подключаются к серверу и отправляют некоторые строковые данные.Как сделать операцию вставки базы данных с сервера TCP без влияния на производительность сервера
В настоящее время я отображая все полученные данные в консоль только для целей тестирования
Мой код сервера, как показано ниже
public class AsyncEchoServer
{
private int _listeningPort;
public AsyncEchoServer(int port)
{
_listeningPort = port;
}
public async void Start()
{
IPAddress ipAddre = IPAddress.Parse("192.168.2.4");
TcpListener listener = new TcpListener(ipAddre, _listeningPort);
listener.Start();
LogMessage("Server is running");
while (true)
{
try
{
var tcpClient = await listener.AcceptTcpClientAsync();
HandleConnectionAsync(tcpClient);
}
catch (Exception exp)
{
LogMessage(exp.ToString());
}
}
}
private async void HandleConnectionAsync(TcpClient tcpClient)
{
string clientInfo = tcpClient.Client.RemoteEndPoint.ToString();
try
{
using (var networkStream = tcpClient.GetStream())
using (var reader = new StreamReader(networkStream))
using (var writer = new StreamWriter(networkStream))
{
writer.AutoFlush = true;
while (true)
{
var dataFromServer = await reader.ReadLineAsync();
if (string.IsNullOrEmpty(dataFromServer))
{
break;
}
LogMessage(dataFromServer);
await writer.WriteLineAsync("FromServer-" + dataFromServer);
}
}
}
catch (Exception exp)
{
LogMessage(exp.Message);
}
finally
{
tcpClient.Close();
}
}
private void LogMessage(string message, [CallerMemberName]string callername = "")
{
System.Diagnostics.Debug.WriteLine("[{0}] - Thread-{1}- {2}", callername, Thread.CurrentThread.ManagedThreadId, message);
}
Теперь я хочу, чтобы спроектировать таким образом, что данные, полученные от клиент должен быть вставлен в соответствующие таблицы базы данных.
Но я боюсь, если это снизит производительность моего сервера, поскольку операции с базой данных довольно громоздки. Может ли кто-нибудь предложить мне, какой подход я должен выполнить для обработки данных, полученных от нескольких клиентов.
Я имею в виду, чтобы использовать DataTable для вставки всех входящих в нее данных и использования буквы в bulkinsert вставить то же самое в SQL сервере
, но я не уверен, как сохранить DataTable для каждого соединения или даже его хорошая идея или нет
Я просто не знаю, откуда я полагаю, чтобы начать, любой ценный вклад будет очень полезно
Спасибо заранее.
Звучит здорово, позвольте мне взглянуть на это. –
[ссылка] (http://stackoverflow.com/questions/32450432/async-tcp-server-in-net-4-5-using-asyn-and-await-data-loss-is-happening), Можете ли вы перейдите по этой ссылке и предложите мне что-нибудь. –
Я пытаюсь сделать базу данных доступной асинхронной, но пока не удалось :(, Можете ли вы предоставить фрагмент кода, ссылающийся на мой отредактированный код выше. Я попытался создать datatable и вставить все входящие данные в это письмо, чтобы сделать крупноформатную фотографию, но это –