我很难弄清楚这一点。
我需要使用 WebSocketSharp 和客户端编写一个 API 服务器。我通过交换消息获得了成功的连接,但是,我想不出一种方法来正确实现这样的行为:
1) Client sends a message with request to the server and waits for a response
2) Server handles the request and response with another message
3) Client receives the response and handles the function
第 2) 点已经在服务器端完成,但我很难实现第 1 点和第 3 点,原因如下:当客户端将消息发送到服务器时,它不会等待响应,而是立即跳到下一个代码执行。
我设法实现了一种半功能的方式,它做得很糟糕,并且可能在很多方面出错(超时、延迟、要处理的多条消息等),例如,这就是我处理服务器登录的方式:
Class Connection {
private bool auth = false;
public string user, pwd;
WebSocket ws = new WebSocket("ws://localhost:1111");
public void Start() {
ws.OnMessage += Ws_OnMessage;
ws.Connect();
}
public void Ws_OnMessage(object sender, MessageEventArgs e) {
string[] decode = e.Data.Split(','); //splitting the server response
if (decode[0].Contains("auth") && decode[1].Contains("accepted")) { auth = true; } //handle request
}
public bool login()
{
ws.Send($"auth,{user},{pwd}"); //client send request to login to server
Thread.Sleep(3000); //wait response from server handled over Ws_onMessage
if (auth) { return true; } else { return false; } //check the response based on bool
}
}
这在“完美”的条件下是可行的,但我们都知道没有什么是完美的,这将遭受许多失败。
我的问题,我如何正确地实现这种行为?有正确的方法吗?