我正在制作一个服务器 - 客户端项目。在这里,服务器根据客户端调用对数据库进行更改。客户端调用是异步的。我正在使用事件根据来电调用一些委托。下面的代码可以给你一个想法
public delegate void Client_Logging_In_Delegate(WebSocketSession session, string e);
public event Client_Logging_In_Delegate Admin_Logging_In_Event;
public void Client_Logging_In_Function(WebSocketSession session, string e)
{
//Database -> this particular client status= true
}
public void Main()
{
server.NewMessageReceived += new SessionEventHandler<WebSocketSession, string> (server.WebSocketServer_NewMessageReceived);
server.Client_Logging_In_Event = new Client_Logging_In_Delegate(server.Client_Logging_In_Function);
}
public void WebSocketServer_NewMessageReceived(WebSocketSession session, string e)
{
string type = e.Substring(0, e.IndexOf("#"));
if (type == "Client_Logging_In")
Client_Logging_In_Event(session, e);
}
我在同一个系统中运行两者。我还没有收到任何崩溃。但在实际情况下,客户 => 5 -> 20 。所以问题是如果两个事件同时发生,那么会发生什么?
编辑:
我正在为服务器部分使用第三方库“SuperWebsocket”。这个定义了 message_Received 事件。文档说它是线程安全的。我的是单线程应用程序。只有一个服务器对象。一些函数(由代表调用)有一些长代码。例如拿这个
public void called_By_Some_Delegate(WebSocketSession session, string e)
{
//1) retrieve a big list from database
//2) change the list into a dictionary object
//3) create a string using dictionary object
//4) send this string to the client using the "session" object
}
现在,假设有两个事件到达同一个委托/函数。现在假设第一个将执行该函数并在第二个点执行。如果第二个同时访问该函数,它将更改列表。所以,我认为会有崩溃。这是我必须弄清楚的情况。