python webscoket(Autobahn)的使用
自从18年4月份入职游戏公司之后很少有时间写博客了!
今天来聊聊python的websocket的使用,在游戏行业游戏客户端和服务端需要大量的,快速的通讯,这里面就会用到websocket
Autobahn 是一个高性能的websocket 它采用了两种实现方案
1 基于Twisted
2 基于asyncio
Autobahn 有如下的特点:
framework for WebSocket and WAMP clients (Websocket框架和WAMP框架)
compatible with Python 2.7 and 3.3+ (兼容python2.7和python3.3以上的版本)
runs on CPython, PyPy and Jython (可以运行在Cpython, PyPy 和Jython 上面)
runs under Twisted and asyncio (可以选择Twisted 或者是asyncio的方式来运行)
implements WebSocket RFC6455 (and draft versions Hybi-10+) (实现WebSocket RFC6455(以及草案版本Hybi-10 +))
implements WebSocket compression (实现WebSocket压缩)
implements WAMP, the Web Application Messaging Protocol (实现Web应用程序消息传递协议)
supports TLS (secure WebSocket) and proxies (支持TLS(安全WebSocket)和代理)
Open-source (MIT license) (开源)
Autobahn 可以用来做什么
Autobahn 非常适用于交易系统,多人游戏, 实时聊天等应用程序的开发
一个简单的webSocket服务端程序
from autobahn.twisted.websocket import WebSocketServerProtocol
# or: from autobahn.asyncio.websocket import WebSocketServerProtocolclass MyServerProtocol(WebSocketServerProtocol):def onConnect(self, request):print("Client connecting: {}".format(request.peer))def onOpen(self):print("WebSocket connection open.")def onMessage(self, payload, isBinary):if isBinary:print("Binary message received: {} bytes".format(len(payload)))else:print("Text message received: {}".format(payload.decode('utf8')))## echo back message verbatimself.sendMessage(payload, isBinary)def onClose(self, wasClean, code, reason):print("WebSocket connection closed: {}".format(reason))
几个重要的方法:
onConnect: 当有新的客户端连接进来的时候调用该方法
onOpen: 当连接成功时调用该方法
onMessage: 该方法是接收来自客户端的消息
onClose: 当关闭时调用该方法
安装Autobahn
Autobahn 的运行依赖于 Twisted 和 asyncio 因此安装Autobahn 需要确认你的python支持了
Twisted 和 asyncio
各个python 版本对 Twisted 和 asyncio 支持如下
使用pip 安装
pip install autobahn[twisted]
pip install autobahn[asyncio]
验证是否安装成功
from autobahn import version
print(version)
0.9.1
启动webScoketServer
twisted 版本
import sysfrom twisted.python import logfrom twisted.internet import reactorlog.startLogging(sys.stdout)from autobahn.twisted.websocket import WebSocketServerFactoryfactory = WebSocketServerFactory()factory.protocol = MyServerProtocolreactor.listenTCP(9000, factory)reactor.run()
asyncio 版本
try:import asyncioexcept ImportError:## Trollius >= 0.3 was renamedimport trollius as asynciofrom autobahn.asyncio.websocket import WebSocketServerFactoryfactory = WebSocketServerFactory()factory.protocol = MyServerProtocolloop = asyncio.get_event_loop()coro = loop.create_server(factory, '127.0.0.1', 9000)server = loop.run_until_complete(coro)try:loop.run_forever()except KeyboardInterrupt:passfinally:server.close()loop.close()
创建WebSocketClient
class MyClientProtocol(WebSocketClientProtocol):def onOpen(self):self.sendMessage(u"Hello, world!".encode('utf8'))def onMessage(self, payload, isBinary):if isBinary:print("Binary message received: {0} bytes".format(len(payload)))else:print("Text message received: {0}".format(payload.decode('utf8')))
WebSocketClientProtocol 可以使用:
autobahn.twisted.websocket.WebSocketClientProtocol
autobahn.asyncio.websocket.WebSocketClientProtocol
使用Client
Twisted版本
import sysfrom twisted.python import logfrom twisted.internet import reactorlog.startLogging(sys.stdout)from autobahn.twisted.websocket import WebSocketClientFactoryfactory = WebSocketClientFactory()factory.protocol = MyClientProtocolreactor.connectTCP("127.0.0.1", 9000, factory)reactor.run()
asyncio版本
try:import asyncioexcept ImportError:## Trollius >= 0.3 was renamedimport trollius as asynciofrom autobahn.asyncio.websocket import WebSocketClientFactoryfactory = WebSocketClientFactory()factory.protocol = MyClientProtocolloop = asyncio.get_event_loop()coro = loop.create_connection(factory, '127.0.0.1', 9000)loop.run_until_complete(coro)loop.run_forever()loop.close()
发送消息
当我们的server或者client 继承了autobahn之后就可以使用 sendMessage
方法来发送消息
接收消息
当我们的server或者client 实现了onMessage(self, payload, isBinary):
定义了该方法之后,就可以接收到消息
更多详细介绍请查看: https://autobahn.readthedocs.io/en/latest/index.html
python webscoket(Autobahn)的使用相关推荐
- Python+Twisted+Autobahn实现Websocket(附完整demo)
在游戏行业游戏客户端和服务端需要大量的,快速的通讯,这里面就会用到websocket . Autobahn 是一个高性能的websocket 它采用了两种实现方案 . 1 基于Twisted 2 基于 ...
- Python全家福,这些库你认识哪些?
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- [转载] python常用库
参考链接: Python–新一代语言 转载至:https://www.cnblogs.com/jiangchunsheng/p/9275881.html 今天我将介绍20个属于我常用工具的Python ...
- Python精选库大全,建议收藏留用!
Python为啥这么火,这么多人学,就是因为简单好学,功能强大,整个社区非常活跃,资料很多.而且这语言涉及了方方面面,比如自动化测试,运维,爬虫,数据分析,机器学习,金融领域,后端开发,云计算,游戏开 ...
- Python资源大全 屌炸Python库
交互式解析器 交互式 Python 解析器. IPython – 功能丰富的工具,非常有效的使用交互式 Python. bpython– 界面丰富的 Python 解析器. ptpython – 高级 ...
- Python 资源库大全
Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护.内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文 ...
- awesome python 中文版 相见恨晚!(pythonNB的第三方资源库)
Awesome Python中文版来啦! 原文链接:Python 资源大全 内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志 ...
- python常用代码大全-Python常用库大全,看看有没有你需要的
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- python常用代码大全-Python常用库大全及简要说明
环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...
最新文章
- 中国最大AI预训练模型发布:113亿参数!北京智源研究院、阿里、清华等联手打造...
- juc java_深入理解JUC(java.util.concurrent)
- python3 uvloop 简介
- Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——2-5
- Android深度探索第五章
- 122. 买卖股票的最佳时机 II008(贪心算法+思路)
- 剑指 Offer 57 - II. 和为s的连续正数序列 思考分析
- A^n=E;则(A*)^n=?
- 机器学习算法基础1-数据的特征工程
- getComputedStyle
- eBPF Up Running: Overview
- 泰勒展开与黑塞矩阵(Hessian Matrix)
- Ubuntu虚拟机全屏问题
- 电力电子应用技术_应用于电气自动化驱动与控制的电力电子技术展示
- 南阳OJ题目33---蛇形填数
- 一种基于BP神经网络的车牌字符识别方法
- linux crontab 每30秒,crontab 每 30 秒自動執行
- 椭圆抛物面matlab程序,椭圆抛物面画法.pdf
- 由KTT展开的一系列知识点
- 重庆航天职业技术学院计算机系在哪个校区,重庆航天职业技术学院地址在哪里,哪个城市...
热门文章
- 移动终端的中场战事 | 十年复盘 EP05
- 5G打通消费新空间,5G应用正在不断落地
- mac nginx映射ip和端口_mac 上配置 nginx 端口转发访问 angular 项目
- 不同派生方式下基类成员在派生类中的可访问范围属性
- java 枚举的学习和使用
- TX Text Control文字处理教程(7)邮件合并
- @Bean注解的使用和详解
- 匈牙利算法——最大匹配问题详解(附模板题)
- Win7台式机调整屏幕亮度
- 燃气灶电气线路图及原理_燃气报警器电路图大全(六款模拟电路设计原理图详解)...