ASGI Websocket服务器的设计考虑了简单性。

microsockets的Python项目详细描述


微软软件包

ASGI Websocket服务器的设计考虑了简单性

安装

pip install microsockets

制作应用程序

^{pr2}$

添加事件处理程序

@app.on("join")asyncdefhandle(ws):room=ws.payload["room"]user=ws.payload["user"]# Rooms managed by rooms.RoomManager, which can be subclassed/replacedawaitws.join(room)# Emit event back to client, may pass a payload as second argumentawaitws.emit("joined")# Broadcast to all other users in the room. skip_self=False would send it to current client as well.awaitws.broadcast("user joined",json.dumps(dict(user=user)),to=[room])

添加中间件

@app.hooks.before_onasyncdefload_payload(ws,func):ws.payload=json.loads(ws.payload)awaitfunc(ws)

使用ASGI服务器运行

pip install uvicorn
uvicorn example:app

安装JS客户端

npm install microsockets

生成客户端处理程序并发出事件

importMicroSocketfrommicrosockets;constsocket=MicroSocket("ws://127.0.0.1:8000");// socket.on(event, handler): Add event handler// socket.off(event, handler?): Remove event handler(s)// socket.send(event, payload): Overridden WebSocket method, requires event. Payload defaults to "".// MicroSocket returns a modified WebSocket, so the full WebSocket API is still available.socket.onopen=function(e){document.write("[open] Connection established <br />");document.write("Joining room <br />");socket.send("join",JSON.stringify({room:"gamers",user:Math.random()}));};socket.on("joined",function(payload){document.write(`[joined] Payload: ${payload} <br />`);});socket.on("user joined",function(payload){document.write(`[user joined] Payload: ${payload} <br />`);});

运行example.py并在多个浏览器选项卡中打开example.html,以查看这个基本示例。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何通过标记名检索多个标记中的元素以进行selenium自动化测试   java iText如何查找最后一行被拆分到下一页   java如何在hudson中的特定jdk上运行Findbugs和PMD?   如何确保java程序与java Environment 6兼容?   对形状进行分组,这样我就可以通过鼠标点击和java处理循环浏览它们   使用生成器映射对象时,java定义无效   maven Java:Struts2和IntelliJ供初学者使用   java子类不继承父类字段   java Android Grid View在Android版本kitkat上崩溃   java Hibernate从缓存返回错误的列表,即使预期的列表与缓存的列表不同   java SendGrid:模板和替换标记   用于普通生产者| Kafka流的java自定义分区器   安卓理解Java内部类中的作用域   无法从Android Studio中的非静态方法调用java非静态方法   比较两个XML响应的JavaXMLUnit   java使用keytool列出密钥   不使用Java客户端库将视频上传到YouTube数据API v3   java My While循环即使在满足条件时也不会结束   自动在外部存储字符串数据,以便以后在Java中使用