31-RPC技术与websocket介绍

先来介绍一下websocket(WS),它是一种类似于http的一种协议,http请求,响应后建立连接然后直接就结束,而websocket是建立连接后保持一个持久性的双向通道来传输数据,然后RPC是什么呢,RPC其实就是将远程服务器想要调用的"函数名"和"参数"打包成一份数据然后通过某种通道(websocket等)传给远程服务器上的某个程序,然后在远程服务器调用完函数后的结果再通过,某种管道(websocket等)传给我们。

下面我们实现一下websocket,需要安装websockets10版本的库:

javascript 复制代码
pip install websockets==10

客户端:

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=
    , initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" id="box">
    <button onclick="pc()">send</button>

    <script>
        var ws = new WebSocket('ws://127.0.0.1:8080')

        // 报错
        ws.onerror = function(e) {
            console.log(e)
        }

        // 成功回调
        // ws.onopen

        // 接收数据
        ws.onmessage = function(dataBack) {
            console.log(dataBack.data)
        }

        // 关闭连接
        // ws.onclose

        function pc() {
            data = document.getElementById('box')
            ws.send(data.value)
        }
    </script>
</body>
</html>

运行起来发现:

因为我们没有服务器,下面来写一下服务端代码:

javascript 复制代码
import asyncio
import websockets

async def echo(ws):
    await ws.send("Hello")
    return True

async def rec_message(ws):
    while True:
        data = await ws.recv()
        print(data)

async def main(ws, path):
    await echo(ws)
    await rec_message(ws)

# 创建服务器实例
ser = websockets.serve(main, '127.0.0.1', 8080)
# 创建一个异步循环对象实例
loop = asyncio.get_event_loop()
# 运行服务器实例直到完成
loop.run_until_complete(ser)
# 一直处于监听状态(即一直运行服务器实例)
loop.run_forever()

这两段代码本质就是相互建立连接,py代码是服务器,当服务器打开之后会寻找ip和端口号相同的客户端,找到客户端建立websocket通道并保持,然后发送Hello,然后客户端可以向服务器发送消息,服务器一直处于监听状态,保持连接接收数据。

小结

本文到此就结束了,文章其实就讲了websocket是什么,怎么建立,原理是什么,RPC又是什么,怎么与websocket配合使用,文章如有什么问题请及时提出,一起交流,加油加油

相关推荐
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
XUEYUAN52122 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
CHENKONG_CK2 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
z落落2 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
曼巴UE52 天前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
开开心心就好2 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
hey you~2 天前
云客服SDK怎么接入网站和小程序?超详细接入步骤
websocket·小程序开发·api对接·企业通信·云客服sdk
代码小学僧3 天前
从 0 到 1,记录我的第一个出海 SaaS 独立开发项目
前端·rpc·音视频开发
K成长日志3 天前
DALI协议-Part209-颜色控制
物联网·网络协议·iot·智能照明·智能建筑·dali
IPdodo_3 天前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议