Websocket

简介: Websocket

本篇文章我们聊一下Websocket这个话题 这是学习计算机的人们常常聊起的一个话题。

前言

WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。

2.什么是websocket?

HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。

对大部分web开发者来说,上面这段描述有点枯燥,其实只要记住几点:

  1. WebSocket可以在浏览器里使用
  2. 支持双向通信
  3. 使用很简单
  4. 基于TCP/IP协议

优点:

  1. 支持双向通信,实时性更强。
  2. 更好的二进制支持。
  3. 较少的控制开销。连接创建后,ws客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不包含头部的情况下,服务端到客户端的包头只有2~10字节(取决于数据包长度),客户端到服务端的的话,需要加上额外的4字节的掩码。而HTTP协议每次通信都需要携带完整的头部。
  4. 支持扩展。ws协议定义了扩展,用户可以扩展协议,或者实现自定义的子协议。(比如支持自定义压缩算法等)

对网络应用层协议的学习来说,最重要的往往就是连接建立过程、数据交换教程。当然,数据的格式是逃不掉的,因为它直接决定了协议本身的能力。好的数据格式能让协议更高效、扩展性更好。

Websocket使用代码示例(在使用Websocket协议之前 确保安装Websocket库 这样有利于编程):

C/S架构

服务端代码:

// websocket_server.cpp  
#include <websocketpp/config/asio_no_tls.hpp>  
#include <websocketpp/server.hpp>  
  
typedef websocketpp::server<websocketpp::config::asio> server;  
  
void on_message(server* s, websocketpp::connection_hdl hdl, server::message_ptr msg) {  
    server::connection_ptr con = s->get_con_from_hdl(hdl);  
  
    // 接收到的消息  
    std::cout << "Received message from client: " << msg->get_payload() << std::endl;  
  
    // 发送回应消息给客户端  
    server::message_ptr response(new server::message);  
    response->set_payload("Hello, client!");  
    con->send(response);  
}  
  
int main() {  
    server websocket_server;  
  
    // 初始化WebSocket服务  
    websocket_server.set_access_channels(websocketpp::lib::bind(&allow_origin, websocket_server, ::std::placeholders::_1));  
    websocket_server.set_message_handler(&on_message);  
  
    // 监听端口  
    websocket_server.listen(9002);  
    websocket_server.start_accept();  
  
    // 运行服务器  
    websocket_server.run();  
  
    return 0;  
}

客户端代码

// websocket_client.cpp  
#include <websocketpp/config/asio_no_tls.hpp>  
#include <websocketpp/client.hpp>  
  
typedef websocketpp::client<websocketpp::config::asio> client;  
  
void on_message(client* s, websocketpp::connection_hdl hdl, client::message_ptr msg) {  
    // 接收到的服务端消息  
    std::cout << "Received message from server: " << msg->get_payload() << std::endl;  
}  
  
void on_connect(client* s, websocketpp::connection_hdl hdl) {  
    // 连接成功后的操作  
    std::cout << "Connected to server" << std::endl;  
  
    // 发送消息给服务端  
    client::connection_ptr con = s->get_con_from_hdl(hdl);  
    client::message_ptr msg(new client::message);  
    msg->set_payload("Hello, server!");  
    con->send(msg);  
}  
  
int main() {  
    client websocket_client;  
  
    // 初始化WebSocket客户端  
    websocket_client.set_message_handler(&on_message);  
    websocket_client.set_connect_handler(&on_connect);  
  
    // 连接到服务器  
    websocket_client.connect("ws://localhost:9002");  
  
    // 运行客户端,等待消息  
    websocket_client.run();  
  
    return 0;  
}

要编译这些代码,需要安装websocketpp库和C++编译器。以下是一个简单的编译命令示例(假设使用的是g++):

g++(Gcc编译器内部原理)命令:

g++ -o websocket_server websocket_server.cpp -lwebsocketpp -lasio -lpthread -lssl -lcrypto  
g++ -o websocket_client websocket_client.cpp -lwebsocketpp -lasio -lpthread -lssl -lcrypto

编译成功后,可以首先运行服务端程序websocket_server,然后再运行客户端程序websocket_client客户端应该会发送一条消息给服务端,并且服务端会回应一条消息给客户端。

请注意,这些代码不包含任何错误处理或高级功能,如并发连接、线程安全或SSL/TLS加密。在开发企业级项目使用时,请确保添加适当的错误处理和安全措施。以上仅仅是一个实例

好了 本篇文章就到这里结束了 在这里 小编想跟大家推荐一篇性价比很高的课程:

https://xxetb.xetslk.com/s/2PjJ3T

相关文章
|
1月前
websocket 的使用
websocket 的使用
|
前端开发 网络协议 API
什么是WebSocket?
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
1682 0
什么是WebSocket?
|
18天前
|
存储 网络协议 JavaScript
WebSocket相关知识
WebSocket相关知识
|
17天前
|
移动开发 前端开发 Java
详解WebSocket
详解WebSocket
18 0
|
1月前
|
XML JSON 前端开发
WebSocket是什么
【4月更文挑战第27天】WebSocket,即Web浏览器与Web服务器之间全双工通信标准。
|
1月前
|
移动开发 网络协议 前端开发
WebSocket一
WebSocket一
|
1月前
|
移动开发 网络协议 Java
WebSocket二
WebSocket二
|
7月前
|
监控 前端开发 安全
你使用过websocket吗?
你使用过websocket吗?
44 0
|
10月前
|
网络协议 前端开发 Java
Websocket
Websocket实现消息推送的方式
110 0
|
10月前
|
资源调度 网络协议 JavaScript
[NsetJs] 使用websocket简单介绍
WebSocket 是一种基于 TCP 的协议,它提供了双向实时通信的能力。相比传统的 HTTP 协议,WebSocket 具有更低的延迟和更高的性能。以下是 WebSocket 的一些特点和优势: