先来介绍一下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配合使用,文章如有什么问题请及时提出,一起交流,加油加油