wsrpc websocket prc是龙卷风

wsrpc-tornado的Python项目详细描述


Travis CILatest Versionhttps://img.shields.io/pypi/wheel/wsrpc-tornado.svghttps://img.shields.io/pypi/pyversions/wsrpc-tornado.svghttps://img.shields.io/pypi/l/wsrpc-tornado.svg

在浏览器和Tornado之间通过WebSocket进行远程过程调用。

功能

  • 正在从服务器端启动调用客户端功能。
  • 从客户端调用服务器方法。
  • 将任何异常从客户端传输到服务器端,反之亦然。
  • 前端库的使用做得很好,没有任何修改。
  • 完全异步服务器端功能。
  • 基于线程的WebSocket处理程序,用于编写完全同步的代码(用于同步数据库驱动程序等)
  • 受保护的服务器端方法(以下划线开头的永远不会直接从客户端调用)
  • 异步连接协议。服务器或客户端可以调用多个具有不可预知的答案顺序的方法。

安装

通过PIP安装:

pip install wsrpc-tornado

如果需要,请安装ujson:

pip install ujson

简单用法

添加后端

fromtimeimporttime## If you want write async tornado code import it# from from wsrpc import WebSocketRoute, WebSocket, wsrpc_static## else you should use thread-base handlerfromwsrpcimportWebSocketRoute,WebSocketThreadedasWebSocket,wsrpc_statictornado.web.Application((# js static files will available as "/js/wsrpc.min.js".wsrpc_static(r'/js/(.*)'),# WebSocket handler. Client will connect here.(r"/ws/",WebSocket),# Serve other static files(r'/(.*)',tornado.web.StaticFileHandler,{'path':os.path.join(project_root,'static'),'default_filename':'index.html'}),))# This class should be call by client.# Connection object will be have the instance of this class when will call route-alias.classTestRoute(WebSocketRoute):# This method will be executed when client will call route-alias first time.definit(self,**kwargs):# the python __init__ must be return "self". This method might return anything.returnkwargsdefgetEpoch(self):# this method named by camelCase because the client can call it.returntime()# stateful request# this is the route alias TestRoute as "test1"WebSocket.ROUTES['test1']=TestRoute# stateless requestWebSocket.ROUTES['test2']=lambda*a,**kw:True# initialize ThreadPool. Needed when using WebSocketThreaded.WebSocket.init_pool()

添加前端侧

<scripttype="text/javascript"src="/js/q.min.js"></script><scripttype="text/javascript"src="/js/wsrpc.min.js"></script><script>varurl=window.location.protocol==="https:"?"wss://":"ws://"+window.location.host+'/ws/';RPC=WSRPC(url,5000);RPC.addRoute('test',function(data){return"Test called";});RPC.connect();RPC.call('test1.getEpoch').then(function(data){console.log(data);},function(error){alert(error);}).done();RPC.call('test2').then(function(data){console.log(data);}).done();</script>

从服务器到客户端的反向调用

后端:

defdo_notify(self):awesome='Notification for you!'yieldself.socket.call('notify',result=awesome)

前端:

<script>varurl=(window.location.protocol==="https:"?"wss://":"ws://")+window.location.host+'/ws/';RPC=WSRPC(url,5000);RPC.addRoute('notify',function(data){returndata.result;});RPC.connect();</script>

示例

在那里运行的示例demo

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

推荐PyPI第三方库


热门话题
virtualbox无法从java移动共享文件夹中的文件   java如何连接Android 4.3.5(GA)的apache HttpClient库?   片段中的java Recyclerview未立即显示警报对话框结果   javac(n,r)计算器程序不工作   java使用BooleanQuery还是编写更多索引?   如何在java中设置y/n循环?   java不兼容的通用通配符捕获   java如何在安卓xml中编写数据绑定时的三元操作条件   java如何使用FileDialog?   java如何创建单元测试来检测是否有人使用错误的编码编辑了文件?   java如何从唯一的字符串生成唯一的int?   java gradletomcatplugin:log4j:WARN找不到记录器的附加程序   java我的动态编程解决方案(Kefa和第一步)在codeforces中有什么问题?   java每天更新两个数据库,使它们都包含相同的有效数据集   java如何检查给定的时间是否在时间限制之间   java在单个json POST上保存父级和子级   java如何获取Solr字段类型