websocket rpc远程调用分析
来源:互联网 发布:hash 统计海量数据 编辑:程序博客网 时间:2024/05/20 13:16
首先在start_webserver处启动一个wsbFactory = WebSocketServerFactory
里面注册vtk_wamp.ImagePushBinaryWebSocketServerProtocol//注意这里他是服务端
里面包含了客户端与服务端交互的所有方法
def onOpen(self)://连接打开
def onMessage(self, msg, isBinary)://消息到来
def onClose(self, wasClean, code, reason)://连接关闭
def connectionLost(self, reason)://连接丢失
def renderStaleImage(self)://渲染图像
def render(self)://渲染图像并发送
网页端
客户端会给canvas对象绑定事件,当有事件触发时
会通过rpc调用viewport.mouse.interaction方法
session.call("viewport.mouse.interaction", [vtkWeb_event]).then(function (res) {
if (res) {
action_pending = false;
render();//需要喧嚷
}
}, function(error) {
console.log("Call to viewport.mouse.interaction failed");
console.log(error);
});
class vtkWebMouseHandler(vtkWebProtocol):
@exportRpc("viewport.mouse.interaction")
retVal = self.getApplication().HandleInteractionEvent(view, pvevent)
del pvevent
if retVal:
self.getApplication().InvokeEvent('PushRender')
return retVal
会调用到vtkWebApplication的HandleInteractionEvent方法进行事件消化
得到是否需要渲染图像,如果需要,会触发PushRender事件,这个事件是在连接成功时注册的lambda表达式
self.subscription = self.app.AddObserver('PushRender', lambda obj, event: reactor.callLater(0.0, lambda: self.render()))
进而调用他自己的render方法向客户端发送图像,
客户端收到图像自行渲染
在客户端的render函数里调用rpc 方法 viewport.image.render获取图像,进而显示到canvas上
// Setup internal API
function render(fetch) {
if (force_render === false) {
if (render_onidle_timeout !== null) {
// clear any renderOnIdle requests that are pending since we
// are sending a render request.
GLOBAL.clearTimeout(render_onidle_timeout);
render_onidle_timeout = null;
}
force_render = true;
var renderCfg = {
size: [ container.innerWidth(), container.innerHeight() ],
view: Number(options.view),
mtime: fetch ? 0 : lastMTime,
quality: quality,
localTime : new Date().getTime()
};
container.trigger({
type: 'stats',
stat_id: 'image-fps',
stat_value: 0 // start
});
session.call("viewport.image.render", [renderCfg]).then(function (res) {//在canvas上绘制图像
里面注册vtk_wamp.ImagePushBinaryWebSocketServerProtocol//注意这里他是服务端
里面包含了客户端与服务端交互的所有方法
def onOpen(self)://连接打开
def onMessage(self, msg, isBinary)://消息到来
def onClose(self, wasClean, code, reason)://连接关闭
def connectionLost(self, reason)://连接丢失
def renderStaleImage(self)://渲染图像
def render(self)://渲染图像并发送
网页端
客户端会给canvas对象绑定事件,当有事件触发时
会通过rpc调用viewport.mouse.interaction方法
session.call("viewport.mouse.interaction", [vtkWeb_event]).then(function (res) {
if (res) {
action_pending = false;
render();//需要喧嚷
}
}, function(error) {
console.log("Call to viewport.mouse.interaction failed");
console.log(error);
});
class vtkWebMouseHandler(vtkWebProtocol):
@exportRpc("viewport.mouse.interaction")
retVal = self.getApplication().HandleInteractionEvent(view, pvevent)
del pvevent
if retVal:
self.getApplication().InvokeEvent('PushRender')
return retVal
会调用到vtkWebApplication的HandleInteractionEvent方法进行事件消化
得到是否需要渲染图像,如果需要,会触发PushRender事件,这个事件是在连接成功时注册的lambda表达式
self.subscription = self.app.AddObserver('PushRender', lambda obj, event: reactor.callLater(0.0, lambda: self.render()))
进而调用他自己的render方法向客户端发送图像,
客户端收到图像自行渲染
在客户端的render函数里调用rpc 方法 viewport.image.render获取图像,进而显示到canvas上
// Setup internal API
function render(fetch) {
if (force_render === false) {
if (render_onidle_timeout !== null) {
// clear any renderOnIdle requests that are pending since we
// are sending a render request.
GLOBAL.clearTimeout(render_onidle_timeout);
render_onidle_timeout = null;
}
force_render = true;
var renderCfg = {
size: [ container.innerWidth(), container.innerHeight() ],
view: Number(options.view),
mtime: fetch ? 0 : lastMTime,
quality: quality,
localTime : new Date().getTime()
};
container.trigger({
type: 'stats',
stat_id: 'image-fps',
stat_value: 0 // start
});
session.call("viewport.image.render", [renderCfg]).then(function (res) {//在canvas上绘制图像
阅读全文
0 0
- websocket rpc远程调用分析
- RPC远程调用问题
- xml-rpc远程调用
- 远程过程调用(RPC)
- Rpc远程过程调用
- RPC远程过程调用
- RPC远程调用编程
- 远程过程调用RPC
- RPC远程过程调用
- RPC 远程过程调用
- RPC远程过程调用
- 远程过程调用(RPC)
- RPC远程调用
- 远程调用RPC
- RPC远程调用
- 远程过程调用 (RPC)
- RPC远程过程调用
- 远程过程调用RPC
- sublime3之路 准备好了才能上路
- 消息中间件学习
- fabric 不要混淆了
- Android 缓存(2)---硬盘缓存DiskLruCache
- 1.3struct
- websocket rpc远程调用分析
- 【Java学习笔记之二十四】对Java多态性的一点理解
- ChromeDriver 与chrome 版本
- VNC安装
- Ruby Gem命令详解
- ORA-00923: 未找到要求的 FROM 关键字
- Caffe源码
- ubuntu下mysql安装及python操作
- 什么是跨域,跨域解决办法