websocket 安全通信

在这里插入图片描述

WebSocket 协议

WebSocket:在 2008 年诞生,2011 年成为国际标准。它允许服务器主动向客户端推送信息,客户端也可以主动向服务器发送信息,实现了真正的双向平等对话。它是一种在单个 TCP 连接上进行全双工通讯的协议,能够更高效地进行实时通信。
传统的轮询:浏览器需要不断地向服务器发出 HTTP 请求,浪费带宽和服务器资源。

WebSocket 的优点:

  • 建立在 TCP 协议之上,服务器端实现相对容易。
  • 与 HTTP 协议兼容性好,默认端口也是 80 和 443,握手阶段采用 HTTP 协议。
  • 数据格式轻量,通信高效。
  • 支持文本和二进制数据传输。
  • 无同源限制,客户端可以与任意服务器通信。
  • 协议标识符是 ws(不加密)和 wss(加密)

WS 和 WSS

  • WS(WebSocket):是一种在单个 TCP 连接上进行全双工通讯的协议。它允许服务器和客户端之间进行实时双向通信。
  • WSS:是加密的 WebSocket 协议,相当于 WebSocket 加上 SSL/TLS 加密层。
    WS + SSL/TLS = WSS。

python sample

  1. 生成无密码保护的自签名证书
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

在这里插入图片描述
common name 也就是你的domain的name, 正式的项目中需要使用第三方认证机构提供的证书

  1. server端代码
import asyncio
import ssl
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(message)

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(certfile="cert.pem", keyfile="key.pem")

start_server = websockets.serve(echo, "localhost", 8765, ssl=ssl_context)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

  1. client 端代码, python 端
import asyncio
import ssl
import websockets

async def hello():
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    ssl_context.load_verify_locations("cert.pem")

    uri = "wss://localhost:8765"
    async with websockets.connect(uri, ssl=ssl_context) as websocket:
        await websocket.send("Hello, world!")
        greeting = await websocket.recv()
        print(f"< {greeting}")

asyncio.get_event_loop().run_until_complete(hello())

其他

正式的wss 需要使用第三方进行认证,如let’s encrypt 等服务, 而不是自己生成的证书。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于实现 WebSocket 即时通信的项目,可能会遇到一些难点。以下是几个常见的问题和解决方法: 1. 连接管理:WebSocket 是基于长连接的通信协议,需要有效地管理连接。你需要设计一个连接管理模块,负责连接的建立、断开和异常处理等。可通过使用框架或库来简化这个过程,例如使用 Flask-SocketIO、Django Channels 或 Socket.io 等。 2. 并发性和性能:实现实时通信需要处理大量的并发连接,并能快速响应客户端请求。你可以使用异步编程和多线程等技术来提高并发处理能力。Python 中的一些库可以帮助你实现这一点,比如 asyncio、gevent 和 eventlet。 3. 安全性:WebSocket 连接需要进行安全验证和身份认证,以确保只有合法的用户可以建立连接。你可以使用令牌验证、用户认证等方式来确保连接的安全性。 4. 数据传输和处理:在实时通信中,数据传输效率和处理速度非常重要。你可以通过压缩和加密数据来提高传输效率,并使用消息队列、缓存等技术来处理数据。 5. 扩展性:当连接数增多时,可能需要扩展服务器的处理能力。你可以考虑使用负载均衡、集群等技术来实现服务器的水平扩展。 总之,实现 WebSocket 即时通信需要综合考虑连接管理、并发性、安全性、数据处理和扩展性等方面的问题。选择合适的技术和工具,合理设计系统架构,可以更好地应对这些难点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeloas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值