我目前正在开发一个嵌入 Flash 游戏的项目,该项目使用 Smartfoxserver 进行 Flash 通信。这种通信主要只是同步两个玩家之间的光标和对象移动。
由于我不是 flash 人,而是 ruby 程序员,我很好奇:flash 为这种时间敏感的数据交换提供了什么样的通信选项?我正在考虑编写一个基于 ruby-eventmachine 的通信服务器,以尽量减少对外部程序的依赖。这甚至可行吗?
我目前正在开发一个嵌入 Flash 游戏的项目,该项目使用 Smartfoxserver 进行 Flash 通信。这种通信主要只是同步两个玩家之间的光标和对象移动。
由于我不是 flash 人,而是 ruby 程序员,我很好奇:flash 为这种时间敏感的数据交换提供了什么样的通信选项?我正在考虑编写一个基于 ruby-eventmachine 的通信服务器,以尽量减少对外部程序的依赖。这甚至可行吗?
虽然我没有给你一个完整的答案,因为我自己还没有完成,我发现自己和你几乎完全一样。
我目前的方法是让我的 ruby 服务器本质上只是一个处理客户端之间所有通信的套接字服务器,但是我个人打算将任何逻辑保留在服务器之外(除非我遇到改变这个想法的理由) .
如果您还没有在 ruby 中进行过任何套接字编程,我推荐以下内容作为跳转点。这是一篇关于 Ruby Socket 编程的 IBM 文档,讨论了异步数据的一种方法: Ruby Sockets - IBM
我认为它最终归结为性能。我目前在日常工作中使用我的 ruby 服务器版本,但数据不必以时间敏感的方式更新。
您可以(几乎?)任何支持套接字的语言创建服务器并使用它来管理您的客户端。
从 Flash 的角度来看,您可以使用 ruby,但我不知道 ruby 是否适合该任务...我的意思是,您可以制作一个PHP 套接字服务器,但它不会承受太大的压力。
SmartFoxServer 的替代方案可以是开源的Red5,用 Java 编写。
如果您想了解 Flash 在处理 p2p 方面的内置功能: Flash p2p:Everett Church 在 Flash Player 10 中,adobe 添加了实时媒体 (RTMFP) 支持 - 媒体始终来自发布同行。在 Flash Player 10.1 beta 中,他们引入了组和应用程序级多播。
但是,您仍然需要一个服务器 ( Stratus ) 来处理介绍和管理活动连接。(另外,我认为它面向 Flash 视频,Stratus 不支持共享对象或脚本。因此,使用 Stratus,您的应用程序将成为客户端直接相互通信。)
编辑:重新阅读您的问题和 Beanish 提供的答案后,我想我第一次把您的问题弄错了。所以我只是重新写了我的答案......