自从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)的使用相关推荐

  1. Python+Twisted+Autobahn实现Websocket(附完整demo)

    在游戏行业游戏客户端和服务端需要大量的,快速的通讯,这里面就会用到websocket . Autobahn 是一个高性能的websocket 它采用了两种实现方案 . 1 基于Twisted 2 基于 ...

  2. Python全家福,这些库你认识哪些?

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  3. [转载] python常用库

    参考链接: Python–新一代语言 转载至:https://www.cnblogs.com/jiangchunsheng/p/9275881.html 今天我将介绍20个属于我常用工具的Python ...

  4. Python精选库大全,建议收藏留用!

    Python为啥这么火,这么多人学,就是因为简单好学,功能强大,整个社区非常活跃,资料很多.而且这语言涉及了方方面面,比如自动化测试,运维,爬虫,数据分析,机器学习,金融领域,后端开发,云计算,游戏开 ...

  5. Python资源大全 屌炸Python库

    交互式解析器 交互式 Python 解析器. IPython – 功能丰富的工具,非常有效的使用交互式 Python. bpython– 界面丰富的 Python 解析器. ptpython – 高级 ...

  6. Python 资源库大全

    Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护.内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文 ...

  7. awesome python 中文版 相见恨晚!(pythonNB的第三方资源库)

    Awesome Python中文版来啦! 原文链接:Python 资源大全 内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志 ...

  8. python常用代码大全-Python常用库大全,看看有没有你需要的

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  9. python常用代码大全-Python常用库大全及简要说明

    环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...

最新文章

  1. 中国最大AI预训练模型发布:113亿参数!北京智源研究院、阿里、清华等联手打造...
  2. juc java_深入理解JUC(java.util.concurrent)
  3. python3 uvloop 简介
  4. Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——2-5
  5. Android深度探索第五章
  6. 122. 买卖股票的最佳时机 II008(贪心算法+思路)
  7. 剑指 Offer 57 - II. 和为s的连续正数序列 思考分析
  8. A^n=E;则(A*)^n=?
  9. 机器学习算法基础1-数据的特征工程
  10. getComputedStyle
  11. eBPF Up Running: Overview
  12. 泰勒展开与黑塞矩阵(Hessian Matrix)
  13. Ubuntu虚拟机全屏问题
  14. 电力电子应用技术_应用于电气自动化驱动与控制的电力电子技术展示
  15. 南阳OJ题目33---蛇形填数
  16. 一种基于BP神经网络的车牌字符识别方法
  17. linux crontab 每30秒,crontab 每 30 秒自動執行
  18. 椭圆抛物面matlab程序,椭圆抛物面画法.pdf
  19. 由KTT展开的一系列知识点
  20. 重庆航天职业技术学院计算机系在哪个校区,重庆航天职业技术学院地址在哪里,哪个城市...

热门文章

  1. 移动终端的中场战事 | 十年复盘 EP05
  2. 5G打通消费新空间,5G应用正在不断落地
  3. mac nginx映射ip和端口_mac 上配置 nginx 端口转发访问 angular 项目
  4. 不同派生方式下基类成员在派生类中的可访问范围属性
  5. java 枚举的学习和使用
  6. TX Text Control文字处理教程(7)邮件合并
  7. @Bean注解的使用和详解
  8. 匈牙利算法——最大匹配问题详解(附模板题)
  9. Win7台式机调整屏幕亮度
  10. 燃气灶电气线路图及原理_燃气报警器电路图大全(六款模拟电路设计原理图详解)...