ActionScript for Multiplayer Games and Virtual Worlds 学习笔记 – 2.Connecting Users

 

这章主要讨论用户连接的,在虚拟社区和多人游戏中,用户与用户的交流是必不可少的.那么用户与用户之间是如何通信的呢,他们之间是直接连接起来,还是有其他方式呢,本章将回答这些问题,并且讨论常见的连接方式。

实现用户之间的交流,客户端必须发送信息给另一个客户端,并且这些信息由另一个客户端可见。通常的,客户端之间的相互交流,采用以下两种方式之一

第一是Peer to Peer. 意思是信息在客户端之间相互传送,而不需要服务器端的帮忙

第二是Client-Server:客户端只发信息给服务器,然后服务器在发送信息给其他客户端,这让其他玩家就知道你在做了什么事情。这类主要有两种方式,轮询以及长连接socket连接形式,socket连接是通过socket 服务器来实现的,这种是最为常见的方式

现在具体说说点对点(Peer toPeer)的连接方式,点对点是两个或者更多的客户端直接交流,不使用服务器的一种方式。一般,点对点在游戏中使用不是很多,点对点在游戏中,速度处理会有一定的优势,不需要服务器。点对点完全是客户端之间的交流, 服务器不是必须的. 游戏开发者和发布者喜欢这种方式,因为不需要去承担服务器端的一些开销。

点对点的缺点。当你的客户端数量比较合理的时候,或者说不是很多的时候,你可以用点对点实现一个游戏,因为不需要太多的消耗,不需要服务器. 但是当你有很大量的客户端存在,并且需要交流的时候, 例如成百上千的, 此时点对点并不可行。你可以想象一下,在有限的网络范围内,比如有1000个客户端,这1000个客户端相互连接会产生1000000个连接,那网络将会变的很紧张。

两人游戏的时候,玩家A与玩家B都控制鼠标去吃一块奶酪,玩家A比较接近奶酪,并且吃到了奶酪,然后玩家A发送消息给B,意思是告诉B,A已经吃了奶酪。B接受消息,删除了奶酪,更新了A的分数,玩家A与玩家B实现了共同的状态。意思是并没有发生任何冲突。

但是现在两个玩家朝着第2块奶酪走去,在几毫秒的时间内,两个玩家分别决定自己已经吃掉了奶酪。他们自身都认为已经吃到了奶酪,并且告诉对方是自己吃到的,这样就会发生冲突了,同样的也会有很多例子….

那么怎么解决这个问题呢,最放的解决方案是采用客户端与服务器的通信方案,让服务器端去判断这些比较重要的情况来解决冲突问题

按理说,点对点形式,可以用其中一个客户端做为主机去解决冲突,但是会产生两个新的问题。

第一点就是,这么做没有发挥点对点的优势,我理解的意思是你使得其实一个客户端压力过大

第二点是,点对点有很多安全隐患,因为所有的重要的游戏逻辑都在客户端处理,你是不可控制的

FLASH PLAYER10开始支持点对点了,FLASH PLAYER10已经支持一种新的通信协议RTMFP,Real-Time Media Flow Protocol, 他被用作点对点的信息传输,意味着FLASH 开发者有能力去连接FLASH客户端到其他FLASH客户端,这个FLASH 客户端必须先连接RTMFP-capable server ,例如Adobe Stratus Server, 这个Server的目的是连接做好FLASH客户端的相互连接。利用这个特性,FLASH开发者可以创建语音和视频聊天。

今天是光棍节了,我接着这个草稿继续写,一口气把这章结束并发布到8ria.com上吧,也算对得起这个伟大的节日了,哈哈。接着说到了轮询,轮询的方式应该在适当的情况下使用的,如留言板,很多开发者屡次采用这种方式。在少量用户情况下,得到了比较成功的运用。

轮询就是客户端定时发送给服务器端并且检测更新的一个过程。 例如一个聊天室,客户端每秒发送两次给服务器端检测是否有更新,客户端定期的发送并且获得回复。这个来自服务器端的回复以某种方式说明没有任何更新,或者说有更新,用户加入或者离开的信息,或者有消息发出的信息。

轮询这种方式,可以想象一下如果在一个庞大用户的聊天室,或者多人游戏,虚拟社区中,有10000个用户,每个用户每秒询问服务器2次,服务器此时所作的计算将是非常繁重的,每秒两次呼叫,那就意味着每秒有20000次的请求以及20000次的回复,大量的贷款和服务器资源被占用了!

还要提一下关于轮询的一些不恰当的应用,当你做游戏实现实时的时候,显然定期发送消息给服务器不是一种很好的解决方案。这种方式我只是看书这么理解下,加上英文不是很好,如想更加深入和精确的学习这块的不妨多查查专门针对这块的资料,我想这本书也是大概给个印象而已。

SOCKET SERVER,SOCCKET服务器是运行在远程物理服务器上的程序,监听来自客户端的所有连接,接受来自客户端的连接,管理这些连接,并且处理客户端之间的消息。Socket服务器存在一个主机或者IP以及至少一个端口。

当一个客户端与服务器端建立socket连接的时候。他们已经与服务器建立了一个长连接,使用SOCKET,客户端可以发送消息给服务器端,服务器端可以发送消息给客户端,这期间不需要轮询,不需要问答的形式,因为SOCKET的建立,时刻准备着接受处理任何消息。

系统可以采用某种手段缩小传输的数据量,服务器可以集合客户端的消息,就是把发送过来的消息集合起来作为一次发送。这种形式也可以运行到点对点上。一些比较经济的Socket服务器也会考虑这么做的

SOCKET服务器接受事件驱动的特性,想象一下,在一个聊天室内,所有的用户都不做任何活动,不说话,也不进入进出,此时应该什么都不发生。没有任何信息的传输,没有任何带宽的占用。当一些事情发生的时候,有人进入进出,有人发送消息的时候,客户端程序采用事件处理,发送消息给服务器端,服务器端在把这消息通知给所有的客户端,让其他客户端知道在聊天室里发生了什么事情。事件驱动的应用在编程中是必不可少的。

接下来关于Socket服务器的选择,大多数做WEBGAME的人都知道现在的主流 SOCKET的服务器,我接触的时间比较短,没有听过也不了解书中提到的服务器,ElectroServer… 我知道FMS, RED5, SFS等等,选择哪个服务器最合适,因人因需求而定吧!这里不对每个服务器多说。

我用比较烂的英文进行浅显的理解,希望不妥的地方高人指点,留言于www.8ria.com


1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...

本站游戏文字以及教程均为个人原创,转载请注明转自 9STG.COM 游手好学并加上本站链接。更多经典游戏来自COMEONGAME.COM

收藏分享:

1,467 人关注


你可能还喜欢

  • No Related Post

107 条评论


  1. mket says:

    Superb website…

    [...] just down the page, are a number of totally not affiliated sites to ours, in spite of this, they are definitely worth going over [...]…

  2. mdai says:

    Gems from the Internet…

    [...] Did you ever think of where to go to for just about any weekend and finally end up heading nowhere but thinking you had [...]…

  3. [...]always a big fan of linking to bloggers that I love but don’t get a lot of link love from[...]……

    [...]just beneath, are numerous totally not related sites to ours, however, they are surely worth going over[...]……

  4. …[Trackback]…

    More info…

  5. Trackback…

    [...] often posts certain quite interesting stuff such as this. If you are not used to this blog [...]…

  6. Read was interesting, stay in touch……

    [...] not to mention we’re linking out to that web-site [...]…

  7. [...]Sites of interest we have a link to[...]……

    [...]usually posts some very interesting stuff like this. If you’re new to this site[...]……


发表回复

您必须 登录 才能发表回复!