研究SPICE,找到了他们官方指定的HTML5客户端。

下载下来用一下,发现跟网页VNC的水平差不多了。

http://www.spice-space.org/page/Html5

服务端直接用QEMU起了一个WINDOWS XP,设定SPICE、再启动一个websockify。

但是一连上就发现鼠标不正常,反映总比实际的距离短。

于是看了下源码,鼠标支持两种模式:

模式1是客户端向服务器发出消息,告诉他鼠标移动了多少。

模式2是客户端向服务器发出消息,告诉他鼠标的具体位置。

追踪了一个,发现SPICE-HTML5最终和QEMU协商为模式1,然后打开inputs.js,发现这么一段代码。

0123456789101112131415161718192021

if (this.sc.mouse_mode == SPICE_MOUSE_MODE_CLIENT)

{

move = new SpiceMsgcMousePosition(this.sc, e)

msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_POSITION, move);

}

else

{

move = new SpiceMsgcMouseMotion(this.sc, e)

msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_MOTION, move);

}

if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready")

{

if (this.sc.inputs.waiting_for_ack < (2 * SPICE_INPUT_MOTION_ACK_BUNCH))

{

this.sc.inputs.send_msg(msg);

this.sc.inputs.waiting_for_ack++;

}

else

{

DEBUG > 0 && this.sc.log_info("Discarding mouse motion");

}

}

基本可以确定就是无论模式一还是模式2,都先生成消息,然后再发给服务器。

但是在发送之前有个检测

01234

if (this.sc.inputs.waiting_for_ack < (2 * SPICE_INPUT_MOTION_ACK_BUNCH))

{

this.sc.inputs.send_msg(msg);

this.sc.inputs.waiting_for_ack++;

}

貌似是“如果还在等待反馈(阈值之前),就先不发送”。

没仔细看SpiceMsgcMouseMotion,但是我做个VNC的网页客户端,做一个队列来缓存事件是常有的,如果不做队列,那么必须要记录下上一次发送消息时的状态。因此我猜测这个地方很有可能在SpiceMsgcMouseMotion里面有个状态记录上一次鼠标状态,如果这个消息被丢弃,那么就会丢弃一个鼠标移动事件。

代码整体改写如下:

0123456789101112131415161718192021

if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready")

{

if (this.sc.inputs.waiting_for_ack < (2 * SPICE_INPUT_MOTION_ACK_BUNCH))

{

if (this.sc.mouse_mode == SPICE_MOUSE_MODE_CLIENT)

{

move = new SpiceMsgcMousePosition(this.sc, e)

msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_POSITION, move);

}

else

{

move = new SpiceMsgcMouseMotion(this.sc, e)

msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_MOTION, move);

}

this.sc.inputs.send_msg(msg);

this.sc.inputs.waiting_for_ack++;

}

else

{

DEBUG > 0 && this.sc.log_info("Discarding mouse motion");

}

}

试了一下,完美运行。。。

spice html5 鼠标漂移,SPICE-HTML5 鼠标指针BUG修复相关推荐

  1. html5鼠标放大,利用HTML5实现粒子游走鼠标经过放大特效

    特效描述:利用HTML5实现 粒子游走 鼠标经过 放大特效.利用HTML5实现粒子游走鼠标经过放大特效 代码结构 1. HTML代码 // WIP // COLOR BUG const c = doc ...

  2. html游戏让目标人物移动,用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动...

    第三篇,鼠标事件与游戏人物移动 一,假设 假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用. 这样的话,添加鼠标事件,其实只需要给ca ...

  3. 手机html5 onmousemove,vue监听鼠标移动事件onmousemove卡顿问题

    如图,第一次移动没问题,第二次点击鼠标后移动就卡了,得松开鼠标才能移动.以后有时候卡有时候不卡,请问这是怎么回事? 代码: UI.vue import CompPanel from '@/compon ...

  4. html5移动拖拽,H5鼠标拖拽移动

    刚开始学H5的js,所以就全用js做的,只是为了锻炼自己的js基础 以下就是我整个H5的代码 var box = document.createElement('div'); box.style.wi ...

  5. 远程电脑打游戏鼠标漂移无法操作解决办法

    描述:远程电脑打游戏鼠标漂移无法操作解决办法 步骤: 更换远程软件Parsec

  6. python梦幻西游鼠标偏移_梦幻西游鼠标漂移,求修改,不知道错误在哪

    梦幻西游鼠标漂移,求修改,不知道错误在哪 .版本 2 .支持库 eAPI .支持库 spec .子程序 鼠标坐标 .局部变量 鼠标图, 字节集 .局部变量 矩形, 矩形数据 .局部变量 第一色位置, ...

  7. virt-manager打开的虚拟机鼠标漂移问题

    使用virt-manager打开的虚拟机鼠标漂移 找到对应的虚拟机名称:vm-0001 使用 virsh edit vm-0001 virsh edit vm-0001 找到 devices 标签,在 ...

  8. HTML 18 HTML5 特性 18.10 HTML5 无障碍

    HTML 文章目录 HTML 18 HTML5 特性 18.10 HTML5 无障碍 18.10.1 什么是无障碍 What is accessibility? 18.10.2 HTML: 为无障碍提 ...

  9. html5开发制作,漂亮html5模板欣赏,H5网站建设

    html5是什么? HTML5 是下一代的 HTML(超文本标记语言,网页的组成部分),HTML5是web开发世界的一次重大的改变,能适配pc.手机等各终端,跨平台性能极强,移动互联网是未来的趋势,h ...

最新文章

  1. 【转载】python学习之 字符串前'r'的用法
  2. android开发字体样式,Android开发中修改程序字体的样式
  3. ssas 数据源mysql_BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备...
  4. java exec mvn_maven---常用插件之EXEC
  5. 8小时删除,这波资源碉堡了 ! @所有人
  6. python实战——发邮件
  7. java argv_argv的编码是什么?
  8. 【MySQL】2、MySQL 创建数据库和表
  9. 3-unit4 postfix+mysql
  10. 树莓派安装和使用kodi
  11. 不做自了汉,大家好才是真的好
  12. JAVA中链表的next解释
  13. Debian Etch 源配置
  14. macbook usb口突然不能用 解决方法
  15. URLEncoder.encode(str,编码) new URLDecoder().decode(str,编码)
  16. Http请求状态码:905
  17. Gartner:超级应用成为战略技术趋势,小程序是否能够脱引而出?
  18. # vue+JavaScript实现slideDown与slideUp效果
  19. 【扔掉计算器】数学心算法《超棒超快》
  20. Spark(五十三):Spark RPC初尝试使用

热门文章

  1. C#语言实例源码系列-实现ComboBox变色
  2. Java后台开发面经汇总
  3. MATLAB与 *.m 文件关联
  4. java毕业设计动物在线领养网站Mybatis+系统+数据库+调试部署
  5. 巧用wms仓储管理系统的拣货方法
  6. 手把手教你 SQL 多表查询
  7. Android View的onMeasure()源码分析
  8. 容器云技术:容器化微服务,Istio占C位出道
  9. scrapy 利用urljoin实现自动翻页 蛋壳租房房源信息
  10. C# 网络通信调试助手 (内有串口、TCP、UDP、http服务)