You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MicroPython是否支持TLS会话复用?STM32F7DISCO握手耗时优化求助

问题:MicroPython ussl模块无法复用TLS会话以缩短握手耗时

我已经实现了带证书的Python TLS服务器,可与STM32F7DISCO设备通信。但受限于硬件性能,STM完成TLSv1.2客户端/服务器握手需要6-7秒。为缩短后续消息传输的握手时间,我尝试复用TLS会话,却遇到以下错误:

('192.168.178.82', '255.255.255.0', '192.168.178.1', '192.168.178.1')
Traceback (most recent call last):
  File "main.py", line 58, in <module>
  File "main.py", line 27, in open
AttributeError: 'SSLSocket' object has no attribute 'session'

这个错误表明,无法复用会话的原因是ussl模块未实现会话功能。以下是我的客户端代码:

import usocket as socket
import ussl as ssl
import random
# import time

__version__ = '0.2.0'
__subversion__ = 'Client'
__author__ = "Philipp"

class send_data:
    def __init__(self):
        # 连接相关参数与计数器
        self.server_port = 2002
        self.server_ip = '192.168.178.67'
        self.server_address = (self.server_ip, self.server_port)
        self.server_ca = 'cert/server-cert.der'
        self.session_nr = None
        self.server_ca_bytes = None
    
    def open(self):
        # 建立与服务器的连接
        with open(self.server_ca, 'rb') as f:
            self.server_ca_bytes = f.read()
            
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client_socket.connect(self.server_address)
        ssl_context = ssl.wrap_socket(client_socket, cadata=self.server_ca_bytes)
        self.session_nr = ssl_context.session
        ssl_context.close()
        client_socket.close()
    
    def send(self, msg_nr: int):
    
        with open(self.server_ca, 'rb') as f:
            self.server_ca_bytes = f.read()

        try:
            # 向服务器发送数据
            client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            client_socket.connect(self.server_address)
            ssl_context = ssl.wrap_socket(client_socket, cadata=self.server_ca_bytes, session=self.session_nr)
    
            msg = "MSG from Client " + str(msg_nr)
            ssl_context.write(msg.encode('utf-8'))
    
            ssl_context.close()
            client_socket.close()
    
            return 0
        except Exception as e:
            return 1


if __name__ == "__main__":
    msg_nr = 0
    error_count = 0
    tls_com = send_data()
    
    tls_com.open()
    
    while True:
        return_msg = tls_com.send(msg_nr)
        error_count += return_msg
        print('已发送编号: ', msg_nr)
        print('错误数: ', error_count)
        msg_nr += 1

        # wait_timer = random.randint(1,9)
        # wait_timer = 1
        # print('等待时间: ', wait_timer)
        # time.sleep(wait_timer)

内容的提问来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:18:26