从服务器代码(和状态)更新客户机浏览器中的画布元素
Update a canvas element in a client's browser from server code (and state)
我对web编程很陌生。是否有可能从服务器代码更新客户端浏览器中的画布元素?
如果决定画布的数据模型在服务器中每秒都在变化,客户机的浏览器应该如何反映这种变化?
连接到服务器的每个客户端都应该看到相同的画布,它经常变化。
我正在尝试在Play with Scala中这样做。
如果不是canvas,会有什么替代方案?
谢谢。
您正在寻找的技术是websockets。
Websockets在服务器和客户端之间创建双向持久连接。Websockets允许服务器将消息广播到整个连接的客户端组,以便如果一个玩家移动,那么该移动将通过服务器传输到组的所有成员。
根据你的服务器类型,你可以看看这些框架,使websockets更容易入门:
插座。IO + node.js: http://socket.io/
SignalR: http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx
处理websockets + canvas的一些技巧:
所有的绘图命令必须是完整的——被称为"原子"(beginPath + moveTo + lineTo + stroke),否则本地和远程命令会相互混淆。
但是如果你遵循这条规则,那么应用远程绘制是简单而直接的:
本地接收包含远程绘图命令的服务器广播
将该命令保存在队列中(因为本地客户端可能正处于抽签过程中,不能被打断)。
当您确定本地客户端没有绘图时,则应用队列远程绘图命令。
提示:最好的是每个客户端都使用相同的笔画颜色和线宽。否则会导致不同的客户画布,因为在客户之间应用绘制的顺序不同。
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- 在 jquery 可排序后定义
- 元素
- 元素的索引
- 元素
- “<元素/>”到“<元素> 元素>”是否有效
- d3.js:水平居中
元素的父元素'元素 - Polymer 1.0不能访问嵌套模板中的元素.元素
- 为什么是n't '元素a
元素