我正在为iOS游戏编写服务器.游戏是基于回合的,服务器需要将信息推送给客户的唯一时间是通知对方的举动.

如果有人可以评论使用websockets和长轮询之间的性能和易用性差异,我很好奇.此外,如果我使用websockets,我应该只使用它来接收信息和发送POST请求的所有其他或应该通过websocket所有的通信?

另外,如果我有兴趣也可以制作一个网络客户端,还有什么可以考虑的websockets和长轮询?

解决方法

What is Long polling ?


传统轮询技术的一个变体,允许从服务器到客户端的信息推送.通过长轮询,客户端以与普通轮询类似的方式从服务器请求信息.

>如果服务器没有可用的客户端信息,
而不是发送空的响应,服务器保存该请求
并等待一些信息可用.
>一旦信息可用(或在适当的超时后),
向客户端发送完整的响应.客户端会正常
然后立即从服务器重新请求信息,这样
服务器几乎总是有一个可用的等待请求
可用于响应事件传送数据.

在Web / AJAX上下文中,漫长的轮询也称为Comet编程.

What about Websockets ?


WebSockets提供客户端和服务器之间的持久连接,双方可以随时使用该连接开始发送数据.

>客户端通过已知的进程建立WebSocket连接
作为WebSocket握手.这个过程从客户端开始
向服务器发送常规HTTP请求.
>此请求中包含一个升级标头,通知服务器
客户端希望建立一个WebSocket连接.

结论:

如果需要实时通讯,您可以很好地选择websockets.

但在长轮询中:

Web客户端和Web服务器之间的连接保持打开,以便当服务器具有新的信息时,可以将其推送到客户端.然后,该请求完成.然后在客户端和服务器之间进行一个新的请求,然后等待来自服务器的另一个更新.由于HTTP / 1.1保持活动,相同的TCP连接通常在多个请求中持续打开.

参考和其他考虑:

PubNub long polling vs sockets – mobile battery life

What are Long-Polling,Websockets,Server-Sent Events (SSE) and Comet?

long polling in objective-C

Websocket Introduction

Websocket Vs Long Polling

Using Websockets in Apps

Websocket Application

PushTechnology-Long Polling

ios – Websockets和轮询基于游戏服务器的长轮询之间的差异的更多相关文章

  1. 用于Android / iOS回合制棋盘游戏的游戏服务器

    我正在编写iPhone游戏,我想创建一个在线多人游戏模式.在未来,这个应用程序将移植到Android设备,所以我想知道如何创建游戏服务器?首先,我应该选择哪种语言?如何使服务器能够与用objective-c和Java编写的程序进行通信?那么,如何有效地做到这一点?如果我打开客户端的套接字,这样好吗?我应该向服务器发送什么样的信息?谢谢你的时间.解决方法编辑您将如何进行大型多人游戏?

  2. windows-server-2008 – 查找可执行文件将数据包发送到特定的IP地址?

    我们托管了WindowsServer2008计算机上的游戏服务器,我们刚刚收到一份报告,其中一位客户正在使用他们的服务器进行某种类型的UDP攻击.被攻击的人为我们提供了IP地址,但是对IPv4的限制,我们有5个游戏服务器运行该IP地址.找出哪些游戏服务器正在发送这些数据包的最佳方法是什么?

  3. php – 保护javascript游戏时机

    我正在创建一个基于画布的游戏,它有一个重要的计时元素.完成游戏后,用户的完成时间将被发送到服务器上的PHP/MysqL,以便与其他玩家进行比较.服务器端定时似乎可能引入加载时间影响用户的实际时间,因此在这种情况下效率低下.我遇到的问题是确定一种确保发送时间合法的方法.如何阻止某人使用他们的控制台并以提交虚假时间的方式编辑客户端代码?任何帮助将不胜感激.你不能.永远不要相信客户.您的服务器的每个请求都可能被欺骗.

  4. windows – 在应用程序运行时替换.dll文件?

    我有几个游戏服务器使用某个.dll文件来运行.有时我需要更新游戏服务器,但我不想打断已经运行的游戏.有没有办法替换.dll文件所以使用该文件的游戏服务器的下一个实例打开新版本,旧的版本继续使用旧版本的.dll直到它们重新启动?使用其中一个工具解锁文件并替换它是否安全?

  5. ios – 游戏中心和我自己的服务器

    我正在创建一个新的在线2人游戏.由于我的其他游戏,我已经有一个服务器上有很多玩家.是否有可能有一个来自GameCenter的玩家和来自我自己的服务器的另一个玩家?我在游戏中需要这种关系:游戏中心玩家–>和我自己的服务器上的其他玩家一起玩我自己的服务器播放器–>在我自己的服务器上玩另一个玩家游戏中心玩家–>和另一个游戏中心玩家一起玩这可能与游戏中心有关吗?

  6. 带有applet的Java客户端 – 服务器游戏

    在我看来,这似乎是一种奇怪的方式.或者有更简单的方法,例如我可以创建一个servlet并将其放在Tomcat服务器上,这样只有有任何玩家才能运行服务器吗?该servlet是否可以与applet(客户端)通信,反之亦然?

  7. ios – Websockets和轮询基于游戏服务器的长轮询之间的差异

    我正在为iOS游戏编写服务器.游戏是基于回合的,服务器需要将信息推送给客户的唯一时间是通知对方的举动.如果有人可以评论使用websockets和长轮询之间的性能和易用性差异,我很好奇.此外,如果我使用websockets,我应该只使用它来接收信息和发送POST请求的所有其他或应该通过websocket所有的通信?另外,如果我有兴趣也可以制作一个网络客户端,还有什么可以考虑的websockets和长轮询?

  8. java – 通过网络或互联网制作多玩家游戏

    嗨,我在Java中编写了一个多玩家游戏,我想知道我需要学习什么和/或我应该使用什么来使游戏可以通过网络或互联网上的多台计算机播放.谢谢,我真的很无知,因为在哪里开始,所以任何建议都是有帮助的.解决方法那些其他答案都是相当高的水平,这是很好的,但你不想要高级别,你想要低级别,如“我如何使它实际发送数据,这是什么意思和什么发送等“这是你做的:一,TCP或UDP?如果你不知道这些东西是什么,请阅读它们,

  9. cocos2d-x 3.x 的数据持久化总结

    一、cocos2d-x数据持久化的几种方式:1.普通文本2.UserDefault:主要用于保存应用程序设置、用户游戏数据等--3.属性列表:读写属性列表--4.sqlite数据库细节可以查api文档,暂不详解。

  10. 《大掌门》欧阳刘彬--基于Cocos2d-x引擎开发经验分享

    《大掌门》欧阳刘彬分享的内容同样是与Cocos2D-X和跨平台开发有关,在演讲中他详细分享了为什么会选择Lua。欧阳刘彬:首先感谢CocoaChina的邀请,跟大家分享一下我们《大掌门》在游戏开发过程当中使用Cocos2D所开发的一些经验。我们为什么选Cocos2D-X,其实最大的原因就是跨平台。

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部