MST
星途 面试题库

面试题:网络编程之libevent基础与WebSocket协议

请简要描述libevent库的事件驱动模型,以及WebSocket协议在建立连接过程中的关键步骤。
18.6万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

libevent库的事件驱动模型

  1. 核心概念:libevent是一个基于事件驱动的开源库,用于简化网络编程和事件处理。它提供了一种机制,允许应用程序注册对特定事件(如文件描述符可读、可写,定时事件等)的回调函数。
  2. 事件循环:应用程序通过创建一个事件循环(event loop)来管理所有注册的事件。事件循环会不断检查是否有已注册的事件发生。
  3. 事件注册:使用libevent,开发者可以创建事件结构体(如struct event),并通过相应函数(如event_new)将事件与文件描述符、事件类型(如EV_READEV_WRITE)以及回调函数关联起来,然后使用event_add函数将事件添加到事件循环中。
  4. 回调执行:当事件发生时,事件循环会调用预先注册的回调函数,在回调函数中开发者可以处理相应的事件逻辑,比如读取或写入数据。

WebSocket协议建立连接过程中的关键步骤

  1. HTTP握手请求:客户端首先发起一个HTTP请求,该请求包含特殊的头部字段来表明这是一个WebSocket连接请求。例如,Upgrade: websocket表示请求升级协议到WebSocket,Connection: Upgrade表明连接要升级,同时还会包含Sec - WebSocket - Key字段,它是一个Base64编码的随机字符串。
  2. 服务器响应:服务器接收到请求后,验证请求的合法性。如果合法,服务器会返回一个HTTP响应,状态码为101(切换协议)。响应头中包含Upgrade: websocketConnection: Upgrade,以及Sec - WebSocket - Accept字段。Sec - WebSocket - Accept字段的值是通过将客户端发送的Sec - WebSocket - Key与一个固定字符串(258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11)拼接,然后进行SHA - 1哈希计算,最后Base64编码得到的。
  3. 连接建立:客户端收到服务器的响应后,验证Sec - WebSocket - Accept字段的正确性。如果验证通过,WebSocket连接就正式建立,客户端和服务器可以开始进行双向通信,通信不再基于HTTP协议,而是WebSocket协议自定义的帧格式。