首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建协作白板绘图应用程序

创建协作白板绘图应用程序
EN

Stack Overflow用户
提问于 2010-05-23 02:56:10
回答 1查看 5.2K关注 0票数 6

我有自己的绘图程序在适当的地方,与各种“绘图工具”,如钢笔,橡皮擦,矩形,圆,选择,文本等。

它是用Python和wxPython制作的。上面提到的每个工具都是一个类,它们都具有多态方法,如left_down()、mouse_motion()、hit_test()等。该程序管理所有绘制的形状的列表--当用户绘制一个形状时,它会被添加到列表中。这也用于管理撤消/重做操作。

因此,我有一个很好的代码库,我可以将协作绘图连接到其中。可以对每个形状进行更改,以了解其所有者--绘制该形状的用户,并仅允许在一个人拥有的形状上执行删除/移动/重新缩放操作。

我只是想知道开发这个的最好方法。一个人在“会话”中将不得不充当服务器,我没有钱提供免费的中央服务器。不知何故,用户需要一种连接到服务器的方法,这意味着某种“发现服务器”browser...or。如何广播对应用程序所做的更改?在每个鼠标运动事件上实时绘制和广播消息将在性能方面代价高昂,并且在给定时间有更多用户时,情况会变得更糟。

任何想法都是受欢迎的,我不太确定从哪里开始开发它(甚至是如何测试它)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-23 05:12:10

制作任何实时协作工具/游戏归根结底都是在客户端之间高效地同步最小共享数据结构上的更改。网络带宽是瓶颈。仅发送同步共享数据所绝对需要的信息。通过存储形状而不是单个像素,您走上了正确的道路。但是,形状不应处理鼠标事件。正如您所提到的,广播鼠标事件将很快使网络带宽饱和!相反,传递鼠标事件如何改变形状的增量。例如,在移动形状后发送最终位置x,y,而不是发送mouse_motion()。

我建议你把绘图程序分成服务端和客户端,服务端保留共享数据的权威版本。客户端从不直接操作共享数据结构;它只向服务器发送网络消息。当客户机和服务器都在同一个进程/PC中时,这看起来很愚蠢,但有一些很好的理由:

  1. 单用户和多用户
  2. 的共享代码路径在使用本地套接字

时,同一进程中的客户端和服务器之间的网络开销几乎为零

此外,编辑不必仅限于该形状的所有者。因为服务器是最终的权威,所以当两个人同时获取相同的形状并将结果发送回客户端时,它会解决任何冲突。(不过,撤消会变得有点棘手。)

虽然集中式服务器最适合用于网络发现,但客户端也可以使用其他方法查找服务器:

  1. 直接通过IP地址发送或侦听网络broadcast packets.
  2. Connect。(服务器IP地址必须通过其他方式进行通信:聊天、手机、房间里的叫声、信鸽……)

最后,看看其他多用户应用程序是如何设计的。以下是一些示例:

  • Zoidcom多人游戏编程库(C++)。这个答案很大程度上是基于Zoidcom文档中的信息。甚至还有一些示例程序演示了通过Wave、Google Docs背后的网络broadcast.
  • Operational Transformation算法发现服务器。(关于黑客News)
  • Etherpad开源实时协作文本editor.
  • Source Multiplayer Networking的文章discussion解释了半寿命期的discussion是如何设计的。了解减少lag/latency.
  • Google Wave的技巧(显然文档仍然很差……)
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2889363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档