• websockets模块


    python服务端代码

    import asyncio
    import websockets
    
    # 检测客户端权限,用户名密码通过才能退出循环
    async def check_permit(websocket):
        while True:
            recv_str = await websocket.recv()
            cred_dict = recv_str.split(":")
            if cred_dict[0] == "admin" and cred_dict[1] == "123456":
                response_str = "congratulation, you have connect with server\r\nnow, you can do something else"
                await websocket.send(response_str)
                return True
            else:
                response_str = "sorry, the username or password is wrong, please submit again"
                await websocket.send(response_str)
    
    # 接收客户端消息并处理,这里只是简单把客户端发来的返回回去
    async def recv_msg(websocket):
        while True:
            recv_text = await websocket.recv()
            response_text = f"your submit context: {recv_text}"
            await websocket.send(response_text)
    
    # 服务器端主逻辑
    # websocket和path是该函数被回调时自动传过来的,不需要自己传
    async def main_logic(websocket, path):
        await check_permit(websocket)
    
        await recv_msg(websocket)
    
    # 把ip换成自己本地的ip
    start_server = websockets.serve(main_logic, '10.10.6.91', 5678)
    # 如果要给被回调的main_logic传递自定义参数,可使用以下形式
    # 一、修改回调形式
    # import functools
    # start_server = websockets.serve(functools.partial(main_logic, other_param="test_value"), '10.10.6.91', 5678)
    # 修改被回调函数定义,增加相应参数
    # async def main_logic(websocket, path, other_param)
    
    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()
    

    python版客户端代码

    import asyncio
    import websockets
    
    # 向服务器端认证,用户名密码通过才能退出循环
    async def auth_system(websocket):
        while True:
            cred_text = input("please enter your username and password: ")
            await websocket.send(cred_text)
            response_str = await websocket.recv()
            if "congratulation" in response_str:
                return True
    
    # 向服务器端发送认证后的消息
    async def send_msg(websocket):
        while True:
            _text = input("please enter your context: ")
            if _text == "exit":
                print(f'you have enter "exit", goodbye')
                await websocket.close(reason="user exit")
                return False
            await websocket.send(_text)
            recv_text = await websocket.recv()
            print(f"{recv_text}")
    
    # 客户端主逻辑
    async def main_logic():
        async with websockets.connect('ws://10.10.6.91:5678') as websocket:  
            await auth_system(websocket)
    
            await send_msg(websocket)
    
    asyncio.get_event_loop().run_until_complete(main_logic())
    

     html代码

    <html>
        <textarea id="response"></textarea>
        <script>
            var ws = new WebSocket('ws://localhost:9999')  //wss=https
            ws.onopen=function () {
                console.log('open')
            }
            ws.onclose=function () {
                console.log('close')
            }
            ws.onmessage=function (e) {
                response.innerHTML += e.data + '\n\r'
            }
        </script>
    </html>
    
  • 相关阅读:
    os.environ的详解
    request.headers.get头部获取内容的缺失
    mysql根据逗号分割的字符串去关联查询另外一个表的数据
    Flask路由中使用正则表达式匹配
    Mac OS下安装mysqlclient遇到的一些坑
    【uWSGI】 listen queue of socket (fd: 3) 错误分析
    redis zset底层实现原理
    计算机网络05 传输层
    计算机网络04 网络层
    计算机网络03 数据链路层
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/15960554.html
Copyright © 2020-2023  润新知