摘要: [刺鸟原创文章,转载请注明出处]前面的工作都已准备就绪,现在我们得来看看服务端怎么和客户端之间进行通信了,Python和FLASH之间的通信,我整理为以下3种:1、用现成的协议及类库处理,比如:pyamf2、自己封包进行二进制数据流通信3、用JSON字符串通信一、JSON和二进制数据流的优缺比较pyamf有比较现成的文档,因此,这里我主要研究研究后两种。我们先简单分析下JSON和数据流各自的优缺点:JSON:优点:数据结构灵活,无需先制定复杂的协议;跨语言之间基本都有完整的解决方案。缺点:传送的数据因为要增加json的特征符(',"",:,{等),导致数据量较大;明 阅读全文
posted @ 2011-09-06 17:08 LemonLi 阅读(816) 评论(0) 推荐(0) 编辑
摘要: [刺鸟原创文章,转载请注明出处]在前面的文章中,我们已经开始了不少逻辑功能的开发,在这期间也有不少可以分享的经验点,这个我们以后慢慢道来。今天,我们主要讨论下如何让服务端能进行分布式部署和工作。一:为什么要支持分布式部署和开发众所周知,python是单线程的语言,存在GIL锁、无法利用多核CPU等诸多限制,为了能让服务端能承载更多的用户,我们必须让程序能在逻辑上、甚至物理上分开,当用户达到一定数量的时候,我们能新开一个进程来响应请求,或多加一台服务器来处理请求。这样就能达到理论上无限扩展的可能性。二:如何让程序能达到上述效果我们简单分析下我们的服务端要实现的功能:战斗服务器:通过之前的文章可. 阅读全文
posted @ 2011-09-06 17:08 LemonLi 阅读(604) 评论(0) 推荐(0) 编辑
摘要: [刺鸟原创文章,转载请注明出处]在之前的准备工作中,我们已经建立了一个socket服务器,并且经过了简单的测试,得到的结论是python可以满足我们的需求,那么接下来,我们要解决的是身为webgame服务端必须的几个功能模块:一、记录和维护所有客户机的状态更新:按照jinmin_lan同学的建议,这里直接用self.transport.sessionno即可,查twisted文档的时候我忽略了这个东西。因此无需按照我下面的方法来手动维护,好吧,我造了一次轮子……为了实现这个功能,我们先回过头来分析下之前的服务端代码:1、每个客户端连接会有一个gameSocket对象被创建,然后触发connec 阅读全文
posted @ 2011-09-06 17:07 LemonLi 阅读(846) 评论(0) 推荐(1) 编辑
摘要: [刺鸟原创文章,转载请注明出处]就在刚才,我们用基于python下的Twisted库写了一个简单的socket服务器,不知道它的性能和基本的承载到底如何呢?接下来,我们作一个简单的测试。说是简单的测试,一点也不假,因为这确实只是最基本的测试,流程是这样的:用python写一个客户端,设定连接数,然后向我们指定的端口发起socket连接,连接成功后,向服务端发送一个字符串并一直保持连接状态,服务端在收到客户端的内容后,向它回复:bingo!igotyourmsg:{content}。好啦,有了需求,开始动手吧!把我们之前的服务端代码略作修改:fromtwisted.internet.proto. 阅读全文
posted @ 2011-09-06 17:06 LemonLi 阅读(1372) 评论(1) 推荐(1) 编辑
摘要: [刺鸟原创文章,转载请注明出处]在开始之前,先简单描述一下项目的特点:我要实现的是一个mmorpg的webgame,地图上需要看到其他的玩家,战斗系统采用半回合制的模式,所谓的半回合制,即是:采用回合制的画面布局,友方和敌方分列左右,但是战斗的中途,其他的玩家可以及时的随时插入这场战斗。当然,作为一款rpgGame,装备加工,NPC对话,任务逻辑等是必不可少的了。在分析了需求以后,我为这款game的程序结构定义如下:客户端,毋庸置疑肯定是flash,服务端分为两块:一是通讯不需要很及时,但是会涉及到很多逻辑处理的模块(如:各UI窗口内的逻辑,NPC对话逻辑,装备加工等),我为此选择了PHP作. 阅读全文
posted @ 2011-09-06 17:05 LemonLi 阅读(810) 评论(0) 推荐(0) 编辑
摘要: 本文是从A Google Interviewing Story这篇文章翻译而来。问题是这样的:假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?比如,如果是下面两个字符串:String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPOM答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPOZ答案是false,因为第二个字符串里的Z字母 阅读全文
posted @ 2011-09-06 17:02 LemonLi 阅读(1515) 评论(1) 推荐(0) 编辑