惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

WebSocket

如果有多个 websocket 业务需求,一般情况下后端是建立一个还是多个 websocket 更好? - V2EX webSocket 在项目运动过程中 可以时不时重新连接吗? - V2EX websocket 下载文件的原理是啥? - V2EX websocket 如何投递消息到 http - V2EX 麻烦问个 Java websocket 的性能优化问题(比较基础) - V2EX 请教一下 websocket 实现发图片的方案和保存聊天记录的方案; - V2EX 问些 websocket 的问题 - V2EX websocket 的 ping/pong 标准是需要服务器主动发 ping? - V2EX [有偿] 原生 app 开发即时通讯 关于 websocket 长链接的问题 - V2EX 请教, websockets 模块起服务, websockets.serve 的方法问题。 - V2EX WebSocket 频繁爆出异常 - V2EX Java 中 websocket 中 session 长久保持打开状态 - V2EX 使用 gevent 作为 Websocket 服务端,浏览器上用 setInterval 定时重复建立 Websocket,结果导致 gevent 不会自动释放之前废弃的连接,内存快要溢出了。怎么自动回收废弃连接呢 - V2EX websocket 在 springsecurity 下结合 jwt 的问题 - V2EX sync-player:使用 websocket 实现异地同步播放视频 - V2EX Websocket 直播间聊天室教程 - GoEasy 快速实现聊天室 - V2EX Uniapp 使用 GoEasy 实现 websocket 实时通讯 - V2EX 搭建 websocket 消息推送服务,必须要考虑的几个问题 - V2EX 最近在看 websocket 的聊天室功能,有个小疑问 - V2EX
问一个 websockets 的问题 - V2EX
longmeier90 · 2023-01-15 · via WebSocket
我用 python 写了一个 websockets 例子, 服务端和客户端在一台服务器上就可以正常通信,
放在不同的服务器就会提示
error:websockets.exceptions.InvalidMessage: did not receive a valid HTTP response 。
是不是网络的问题,不过我服务器防火墙上的端口都打开了。

sever.py 服务端


import asyncio
import websockets

# 检测客户端权限,用户名密码通过才能退出循环
async def check_permit(websocket):
    while True:
        recv_str = await websocket.recv()
        cred_dict = recv_str.split(":")
        print("接受",cred_dict)
        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()
        print("消息:",str(recv_text))
        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)

start_server = websockets.serve(main_logic, '0.0.0.0', 8765)

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



#### client.py 客户端

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://(server 公网 ip):8765') as websocket:
        await auth_system(websocket)

        await send_msg(websocket)

asyncio.get_event_loop().run_until_complete(main_logic())