使用Autobahn的远程调用模式
Autobahn提供了远程调用模式(RPC = Remote Procedure Calls),服务器写好供调用的函数并注册一个uri,客户端调用函数时对应的代码就会在服务器上跑一遍并返回结果给客户端。
常用相关函数:
服务器端:
注册一个服务object用于rpc:
registerForRpc(obj, baseUri='')
obj指定执行代码时的self,baseuri为客户端call时的前缀。这个函数将会把obj所属类中所有带@exportRpc的方法提供给客户端调用。
实际执行的代码相当于obj.(realUri-baseUri)
注册一个obj和其中的一个方法:
registerMethodForRpc(uri, obj, proc)
注册一个全局函数:
registerProcedureForRpc(uri, proc)
js客户端:
远程调用函数:
Session.call ( method, ... )
method是一个uri,用它减去服务器中注册的baseUri即为调用的方法名,后跟变长参数列表。
如需注册回调函数,可以使用then()方法分别给执行成功和失败注册。类似如下代码:
sess.call("http://example.com#test", 1, 2, 3).then(function(res){}, function(error) {})
完整程序:
服务器端:
from twisted.internet import reactor
from autobahn.wamp import exportRpc, \WampServerFactory, \WampServerProtocol
from autobahn.websocket import listenWSclass MyProtocol(WampServerProtocol):def onSessionOpen(self):
# 因为输出的函数都在本类里,故第一个参数为self
# 否则需要实例化一个含输出函数的类做为参数self.registerForRpc(self, "http://example.com/rpc#")
# @exportRpc说明此函数会被输出@exportRpcdef login(self, username):print "login"@exportRpcdef new(self, username, roomname, size):print "new"@exportRpcdef join(self, username, roomname):print "join"@exportRpcdef exit(self, username, roomname):print "exit"if __name__ == '__main__':factory = WampServerFactory("ws://localhost:9000")factory.protocol = MyProtocollistenWS(factory)reactor.run()
js客户端:
$(document).ready(function() {var username = $.cookie("username");var sess;// setHint是一个我自己写的函数用于显示提示消息 $.setHint("connecting");ab.connect("ws://" + location.hostname + ":9000", function (session) {
// 连接成功后执行的函数 $.setHint();sess = session;
// 远程调用,可以看到这里的uri比服务器中注册的http://example.com/rpc多了login,故调用的是login函数,后跟变长参数列表
// .then指定回调函数sess.call("http://example.com/rpc#login", username).then(function (res) {
// 执行成功后的函数,res为返回值},function (error) {
// 执行失败的函数,可以通过error.desc查看具体原因$.setHint("failed");});},function (code, reason) {
// 连接断开后执行的函数sess = null;$.setHint("failed");});$("#new").click(function() {
// 远程调用new函数,后跟三个参数sess.call("http://example.com/rpc#new", username, username, 5).then(function (res) {
// 执行成功后location = "game.html"},function (error) {
// 执行失败后$.setHint("newmfailed");});});
});
使用Autobahn的远程调用模式相关推荐
- RabbitMQ RPC远程调用模式
- java远程调用笔记
2019独角兽企业重金招聘Python工程师标准>>> 1.远程调用 常用的远程调用:webservice,二进制协议,Restful webservice:本质上就是http+so ...
- 远程代理模式-Remote Proxy(Java实现)
远程代理模式-Remote Proxy 服务端通过rmi将对象注册到远程服务, 客户端使用时, 只需要通过rmi协议获取即可, 只要接口统一, 即可不需要知道内部具体实现, 直接调用使用. Compa ...
- 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )
文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...
- 透彻,在SpringBoot项目中使用Netty实现远程调用
今日推荐Spring新版本抛弃JVM,可独立部署,网友:要自立门户???国内大神成功给手机装上了 Win11,代码已开源!Fluent Mybatis 牛逼!Nginx 常用配置清单这玩意比Threa ...
- java socket 远程调用_SpringBoot使用Netty实现远程调用的示例
前言 众所周知我们在进行网络连接的时候,建立套接字连接是一个非常消耗性能的事情,特别是在分布式的情况下,用线程池去保持多个客户端连接,是一种非常消耗线程的行为.那么我们该通过什么技术去解决上述的问题呢 ...
- C#远程调用技术WebService葵花宝典
一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你 ...
- 【转】一步一步教你远程调用EJB
一步一步教你远程调用EJB http://www.diybl.com/course/1_web/webjs/20071226/94785.html www.diybl.com 时间:2007-12-2 ...
- 调用线程必须为sta_Java手写分布式系统远程调用RPC框架
一.RPC简介 最近看hadoop底层通信,都是通过RPC实现的. RPC(Remote Procedure Call Protocol)远程调用: 远程过程调用是一种常用的分布式网络通信协议,它允许 ...
最新文章
- file的open()和read()
- 理解水平扩展和垂直扩展
- 【数据结构基础笔记】【顺序表】
- 启动linux_使用 UEFI 双启动 Windows 和 Linux | Linux 中国
- wordpress安装后勿忘删除install.php
- 【Web前端】hexo博客管理
- 关于Mybatis的xml配置文件中使用and与or混合查询
- 阿里、美团、滴滴产品经理共述:产品经理的“乐”与“伤”
- JVM本地方法栈及native方法
- mysql连接不用数据库名称_C++连接MySQL数据库
- 用微课学计算机应用基础--PPT制作
- 如何清除手机拍照的图片 exif 防止泄露你的隐私
- SAP-MM-PA精解分析系列之供应商(01)-基本概念及业务介绍
- Bootstrap学习 - JavaScript插件
- jquery ajax传参
- ArcGIS Server 发布地图服务遇到的问题
- Spark stand a lone 模式
- 2015年天翊他爹有想法了
- 听华应龙的课我会用计算机吗体会,听华应龙老师课有感
- 教你如何用Canvas绘制整身的哆啦A梦
热门文章
- 解决vue运行报错:npm ERR! my-project@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webp
- Grafana 实现 clickhouse 监控(linux+mac+windows三种平台详解)
- 全球与中国单晶硅外延片市场深度研究分析报告
- 可能你也怀疑,5G时代下,学web前端培训会有什么影响?
- Android 避免主线程执行网络请求之Activity/Fragment 结束后处理异步回调
- vidaa4基于android,详细解析vidaa70v1f-s 和小米4a 70寸哪个好?测评区别大吗?亲身体验内幕曝光...
- 虚拟现实VR遇上云计算 将是怎样的情缘
- 机器学习总结2 #博学谷IT学习技术支持#
- python 条形码扫描_Python evdev和条形码扫描
- 自媒体形式下的个人设计(面向用户)—博客,QQ空间等个人主页的设计