在Facebook应用程序和云计算时代,我正在重新思考大型多人游戏.
假设我要在现有的开放协议之上构建一些东西,我想为1,000,000个并发播放器提供服务,只是为了解决问题.
假设每个玩家都有一个传入的消息队列(用于聊天和诸如此类),平均有一个传入的消息队列(公会,区域,实例,拍卖......),因此我们有2,000,000个队列.玩家将一次收听1-10个队列.每个队列平均每秒可能有1条消息,但某些队列将具有更高的速率和更多的侦听器(例如,级别实例的"实体位置"队列).假设系统排队延迟不超过100毫秒,这对于温和的动作导向游戏来说是可以的(但不是像Quake或Unreal Tournament这样的游戏).
从其他系统,我知道在单个1U或刀片盒上为10,000个用户提供服务是一个合理的期望(假设没有其他任何昂贵的东西,比如物理模拟或诸如此类的东西).
因此,使用交叉开关集群系统,客户端连接到连接网关,然后连接到消息队列服务器,我们每个网关有100个用户,有100个网关机器,每个队列服务器有100个消息队列,有100个队列机器.再次,仅适用于一般范围.每台MQ机器上的连接数量很小:大约100,与每个网关通信.网关上的连接数量会更高:客户端为10,100,连接所有队列服务器.(除此之外,为游戏世界模拟服务器添加一些连接或诸如此类的东西,但我现在试图将它保持分离)
如果我不想从头开始构建这个,我必须使用一些存在的消息传递和/或排队基础结构.我能找到的两个开放协议是AMQP和XMPP.XMPP的预期用途更像是这个游戏系统所需要的,但开销非常明显(XML,加上冗长的状态数据,以及必须在顶部构建的各种其他通道).AMQP的实际数据模型更接近我上面描述的内容,但所有用户似乎都是大型企业级公司,工作负载似乎与工作流程相关,而不是与实时游戏更新相关.
有没有人可以分享这些技术或其实现的日常经验?
概观
我在客户端(Android手机)和服务器(Windows Server)之间来回发送消息.通过TCP使用持久连接,哪种协议将是最佳解决方案.我正在考虑性能,可扩展性,消息大小和电池寿命.消息必须按顺序到达目的地,不能重复.
这似乎是更好的解决方案,但似乎很少有用户的大型实现示例.我不确定是否可以将其集成到Windows服务器中,或者是否必须是另一个应用程序或服务器正在运行.最后,似乎总体上缺乏有关它的信息.
这似乎有很多实现,例子,甚至一本书:).然而,主要目的似乎是即时通讯客户端和谷歌谈话之类的东西.这是服务器和客户端之间消息传递的最佳解决方案吗?我知道目前XMPP主要用于客户端到服务器到客户端架构.
如果我错了请纠正我,并提前感谢任何指导.
Facebook将弃用他们当前允许通过XMPP发送聊天消息的聊天API.
我的公司目前正在开发一种可以利用聊天API的产品,我想更多地了解这项服务的未来.
明年将基于XMPP的聊天API替换为新版本吗?还是会过时的?
对此的任何意见将不胜感激!
有没有人写过一个使用WebSockets的开源XMPP库,是否应该由浏览器运行?
您好我想使用XMPP在Android中实现聊天应用程序(以避免GCM通知,因为GCM使用请求响应过程).
我使用Smack库和OpenFire服务器完成了70 perc功能.但在完成这些后我才知道了QuickBlox SDK.我完全不知道这一点,但很少有人通过看到这些特征说它是好的api ..
任何人都可以告诉我,这是使用smack for xmpp实现聊天应用程序的正确方法.或者我们有任何其他使用xmpp for android的好api.
我一直在寻找JSON模式标准及其相应的php实现.期待一些开源,我很惊讶,只找到一个PHP实现.我当时正在使用这种技术(JSON)和模式库来解析我传入的浏览器请求.
这种自然的解析/验证活动在XML中看起来很自然,让我想知道为什么JSON不是这种情况.
我最终遇到了疑问.我应该继续我的JSON结构数据交换还是切换到XML? 与XML相比,我首先选择了JSON,因为它的简单性和冗长的语法,但如果我必须重新开发世界上所有现有的标准,这些参数会变得更轻松.我还选择了JSON,希望限制我的Web服务器和移动应用程序之间的通信大小.使用彗星应用程序,XMPP似乎被谷歌,Facebook这样的大品牌实施和使用,用于实时聊天聊天文本或基于视频的消息.
所以实际的问题是:
请帮助我理解,我在这里缺少一些经验?
使用asmack接收文件时遇到问题.在这里,我粘贴我发送和接收日志的错误和数据包
// error
04-21 19:21:05.109: WARN/System.err(7401): Error in execution:
04-21 19:21:05.109: WARN/System.err(7401): -- caused by: java.util.concurrent.ExecutionException:
04-21 19:21:05.109: WARN/System.err(7401): -- caused by: No response from remote client:
04-21 19:21:05.109: WARN/System.err(7401): at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:199)
04-21 19:21:05.109: WARN/System.err(7401): at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:47)
04-21 19:21:05.109: WARN/System.err(7401): at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:124)
04-21 19:21:05.109: WARN/System.err(7401): at java.lang.Thread.run(Thread.java:1019)
04-21 19:21:05.109: WARN/System.err(7401): Nested Exception:
04-21 19:21:05.109: WARN/System.err(7401): java.util.concurrent.ExecutionException:
04-21 19:21:05.109: WARN/System.err(7401): -- caused by: No response from remote client:
04-21 19:21:05.109: WARN/System.err(7401): at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:234)
04-21 19:21:05.109: WARN/System.err(7401): at java.util.concurrent.FutureTask.get(FutureTask.java:91)
04-21 19:21:05.109: WARN/System.err(7401): …Run Code Online (Sandbox Code Playgroud) 我使用Android的asmack-android-7-beem库.我有一个后台服务正在运行,例如我的应用程序保持活动状态.但迟早XMPP连接会在没有任何通知的情况下死亡.服务器说客户端仍然在线,但没有发送或接收数据包.
例如,当其他客户端具有新的存在时,客户端不接收任何存在分组.我有XMPPConnection作为我的主要Application类的一个属性.
我ConnectionConfiguration config.setReconnectionAllowed(true)在连接之前设置了.
但重新连接不会发生.XMPPConnection connection.isConnected()返回true.
因此客户端不知道连接实际上已丢失.
有没有办法保持连接活着?
为遇到同样问题的其他人发布此信息.
我正在使用stanza.io连接到XMPP服务器的浏览器客户端(在我的例子中是Prosody).我默认使用的是wss://连接.在开发期间的某个时刻,我的客户端根本无法连接 - 它会立即静默断开连接,而不会提供任何有用的错误信息.
没有错误日志,没有错误代码,没有确认对话框或条形图,没有可能出错的迹象.
我正在寻找这个答案使用您自己的XMPP服务器为Android聊天应用程序(Smack API)来了解可用的XMPP API.Smack似乎是个不错的选择.
在Smack 4.1之前,必须依赖aSmack.从4.1开始,Smack将在Android上本机运行.我有几个"入门"问题.
问题1:
如何在Eclipse的Android项目中包含Smack 4.1?
这里的说明https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide似乎适用于Android Studio
问题2:
Android的代码是否保持不变?
我在这里指的是他们的官方文档:https://www.igniterealtime.org/builds/smack/docs/latest/documentation/index.html
我想知道的是API的用法是否保持不变Android也是.
xmpp ×10
android ×5
smack ×3
java ×2
amqp ×1
asmack ×1
c# ×1
connection ×1
eclipse ×1
facebook ×1
javascript ×1
json ×1
jsonschema ×1
mqtt ×1
performance ×1
quickblox ×1
ssl ×1
websocket ×1
xml ×1