日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Firefly笔记一之http模块

發布時間:2024/3/12 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Firefly笔记一之http模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

firefly筆記一之http模塊

  Firefly是免費開源的游戲服務器端框架,開發語言是python,基于twisted框架開發,作為一名前端人員都有一顆后端的夢。。希望能堅持下去一直把自己的學習新東西的過程記錄下來,不對的地方能夠及時一起探討。

  首先確認好Firefly的搭建環境已經OK,沒有搭建的可以參考官方網站:

http://www.9miao.com/forum.php?mod=viewthread&tid=33009&fromuid=87

http://www.9miao.com/forum.php?mod=viewthread&tid=43956&fromuid=87

? ? ?為了更好的熟悉整個流程以及學習(這正是開源的力量)Firefly我們先從頭新建一個工程一步步來

  1:創建工程?

?

  2:由于新建的工程默認是支持一個長連接的配置,所以先把配置改成web的配置

    (1)修改config.json文件 把testserver的key改為我們的webport:

?

?

?

?

     (2)修改app/apptest.py

      (3) 啟動Firefly?

   ? ? ?  (4)(打開瀏覽器輸入http://localhost:1000/snoy)(因為我是遠程其他電腦所以IP是另外一個臺電腦IP,本地直接寫localhost即可)

  3 再深入了解一下,我們真正開發時肯定是要傳入參數的,例如一般弱聯網游戲通過json來相互交互協議數據等,google查了下最常用的json庫是simplejson。

首先下載安裝simplejson,官網是https://pypi.python.org/pypi/simplejson/?直接下載安裝即可。

   ?(1)重新修改app/apptest文件

  

1 #coding:utf8 2 3 from firefly.server.globalobject import webserviceHandle 4 from twisted.web import resource 5 import simplejson as json 6 7 @webserviceHandle('snoy') 8 class helloFirefly(resource.Resource): 9 def render(self, request): 10 length = request.getHeader('content-length') 11 print length 12 version = request.getHeader('Version') 13 print version 14 code = request.code 15 print code 16 method = request.method 17 print method 18 print request.path 19 print request.transport 20 value = request.args 21 jsonData = json.dumps(value) 22 print jsonData 23 s = json.loads(jsonData) 24 print s 25 print s["uid"] 26 27 #test 28 value1 = '{"name":"test", "type":{"name":"seq", "parameter":["1", "2"]}}' 29 s = json.loads(value1) 30 print s 31 print s.keys() 32 print s["name"] 33 print s["type"]["name"] 34 print s["type"]["parameter"][1] 35 36 return s

?

 (2)關閉Firefly 再重新打開

  關閉:?pkill -9 -f python*

  打開:?python startmaster.py

 (瀏覽器輸入http://localhost:1000/snoy?uid=1&passwd=hello&acc=xiuxinming)

  注意查看服務器打印內容:

  (3)代碼解析:

   通過看Twisted文檔知道Twisted技術體系包含2個層次:協議和工廠。協議負責連接成功以后對交互的處理,而工廠則是負責連接過程。在HTTP協議中,連接之后還有個生成HTTP請求報文的過程,所以構造出了一個Request對象來處理具體的一個HTTP請求的報文。在HTTP中的請求報文處理對象是 twisted.web.http.Request 類;HTTP的協議類是 twisted.web.http.HTTPChannel ;HTTP工廠是 twisted.web.http.HTTPFactory類;

   這里知道客戶端發給服務器的信息在request里面,那么通過request我們知道所有關于客戶端的信息,其中對我們最主要的就是后面的內容了。

  ?看打印效果request.args是所以參數的內容,但是看內容格式是字典格式,所以首先通過simplejson把字典轉化為json格式內容然后再讀取出來value;

  ?基本上到這里對于客戶端的解析部分應該就OK了。再來看下封包的格式,主要是simplejson的使用看simplejson文檔主要就4個方法詳細請  看http://blog.sina.com.cn/s/blog_7ca42bff010185ha.html。

  4:基本上如果只是應用的話對于弱社交部分夠使用了以上,但是既然是開源為什么不進去看看到底咋回事呢,雖然一點不懂Twisted和Firefly。。。

    反過來追蹤看看Firefly到底做了什么,首先追蹤webserviceHandle在哪里出現,發現是在firefly-master\firefly\firefly\server\globalobject里面,看里面幾個方法有

  

def masterserviceHandle(target): def netserviceHandle(target): def rootserviceHandle(target): class webserviceHandle:"""這是一個修飾符對象"""def __init__(self,url=None):"""@param url: str http 訪問的路徑"""self._url = urldef __call__(self,cls):""""""if self._url:GlobalObject().webroot.putChild(self._url, cls())else:GlobalObject().webroot.putChild(cls.__name__, cls()) class remoteserviceHandle:

  雖然不懂具體是什么意思,但是看名字應該是各種服務的注冊,剛入手從最簡單的開始,看web部分的處理,大概意思應該是注冊的功能。搜索putChild果然出現在Twisted官方文檔里面

def putChild(self, path, child): (source) from twisted.web.resource.IResource Register a static child.You almost certainly don't want '/' in your path. If you intended to have the root of a folder, e.g. /foo/, you want path to be ''.def render(self, request): (source) from twisted.web.resource.IResource overridden in twisted.flow.web.Resource, twisted.web.distrib.ResourceSubscription, twisted.web.error.ErrorPage, twisted.web.proxy.ReverseProxyResource, twisted.web.rewrite.RewriterResource, twisted.web.script.PythonScript, twisted.web.script.ResourceScriptDirectory, twisted.web.script.ResourceScriptWrapper, twisted.web.soap.SOAPPublisher, twisted.web.static.ASISProcessor, twisted.web.static.Data, twisted.web.static.DirectoryLister, twisted.web.static.File, twisted.web.static.Redirect, twisted.web.twcgi.CGIDirectory, twisted.web.twcgi.CGIScript, twisted.web.util.DeferredResource, twisted.web.util.ParentRedirect, twisted.web.util.Redirect, twisted.web.vhost.NameVirtualHost, twisted.web.widgets.Gadget, twisted.web.widgets.Page, twisted.web.widgets.WidgetResource, twisted.web.woven.controller.BlankPage, twisted.web.woven.controller.Controller, twisted.web.woven.form.FormProcessor, twisted.web.woven.guard.SessionWrapper, twisted.web.woven.tapestry.Tapestry, twisted.web.woven.template.DOMController, twisted.web.woven.template.DOMTemplate Render a given resource. See IResource's render method. I delegate to methods of self with the form 'render_METHOD' where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.render_METHOD methods are expected to return a string which will be the rendered page, unless the return value is twisted.web.server.NOT_DONE_YET, in which case it is this class's responsibility to write the results to request.write(data), then call request.finish(). Old code that overrides render() directly is likewise expected to return a string or NOT_DONE_YET.

  通過閱讀文檔大概了解到resource是一個總節點會往下分發Resource,根據需求可以添加不同的child,render()方法是回調具體處理每一個節點的方法。那基本上有些疑問就解決了,為什么建立好render()方法之后客戶端發來請求會自動調用,為什么注冊一個webserviceHandle傳個參數"snoy"就會自動找到這里來處理。那如果建立多個webserviceHandle傳不同參數會不會都會被調用呢?經過測試時可以的,但是只能建立一級目錄例如只能是http://172.16.3.229:1000/snoy? 而不能是http://172.16.3.229:1000/snoy/test1/test2/ ? 具體原因等以后深入了細看。

  再仔細想我們是直接處理的邏輯,那么包頭啊 解析啊 發送等等哪里幫我們處理的呢?還是打開源代碼看到個web文件夾進去看一下只有一個delayrequest.py文件,進去看了下很像是引擎幫我們封裝了細節問題,我們只要處理邏輯就OK了,具體是不是還等待確定。

  

?

      

轉載于:https://www.cnblogs.com/liunianing/p/3425865.html

總結

以上是生活随笔為你收集整理的Firefly笔记一之http模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩视频免费 | 少妇太紧太爽又黄又硬又爽小说 | 黄色小说图片视频 | 少妇激情偷人爽爽91嫩草 | 女儿的朋友在线播放 | 老司机综合网 | 五月六月丁香 | 熟妇无码乱子成人精品 | 国产第一区第二区 | 亚洲hh | 久久久午夜电影 | 波多野结衣视频免费在线观看 | 国产精品成人一区二区三区电影毛片 | 91成人免费看 | 国产婷婷一区二区三区久久 | 福利午夜视频 | 亚洲字幕av| 中国黄色一级片 | 四虎激情 | 日本三级456| 91在线观看喷潮 | 久久久嫩草 | 日韩国产精品久久 | 免费看黄色片视频 | 黄色日皮视频 | 影音先锋中文字幕第一页 | 伊人网欧美 | 国产精品区二区三区日本 | 国产精品 日韩 | 日本免费黄色网 | 欧美午夜理伦三级在线观看 | 在线观看亚洲网站 | 亚洲一区二区中文字幕 | 国产精品亚洲二区在线观看 | 中国久久久 | 91成品人影院 | 校园春色av| 青青草成人免费 | 伦理片久久 | 日韩一级片免费观看 | 日本网站免费观看 | 动漫女被黄漫免费视频 | 天天操天天玩 | 国产又粗又猛又爽又黄的 | 亚洲欧美精品一区二区三区 | 国产免费一级片 | 91成人国产 | 午夜色婷婷 | 免费av网站在线 | 91精品国产aⅴ一区二区 | 欧美一区二区三区免费在线观看 | 日本三级视频在线观看 | 成人影视网址 | 国产一级片自拍 | 男人天堂久久 | 中文字幕日韩电影 | 国产精品jizz| 欧美午夜网 | 国产日韩欧美视频在线观看 | 国产精品视频全国免费观看 | 天天色官网 | 无码人妻丰满熟妇区bbbbxxxx | 欧美日韩一区二区电影 | 国产污污| 成人精品一区二区三区中文字幕 | 色呦呦在线免费观看 | 日韩激情 | 91吃瓜今日吃瓜入口 | 泽村玲子在线 | 成人免费看片又大又黄 | 日日射天天干 | 国产精品久久久久影院老司 | 12av毛片| 色多多视频在线 | 18av在线播放 | 亚洲激情偷拍 | 精品国产乱码久久久久久鸭王1 | 国产xxx视频 | 国产精品国产精品国产专区蜜臀ah | 蜜桃一区二区三区 | 99mav| 在线观看免费视频一区二区 | 亚洲好骚综合 | 91一区在线 | 日韩精品v| 999久久 | 国产毛片毛片毛片毛片 | 国产福利小视频在线观看 | 日本美女视频网站 | 天天操人人爽 | 精品国产va久久久久久久 | 亚洲图片欧美在线 | 最近国语视频在线观看免费播放 | 国产三级在线 | 日本a免费 | 四虎永久在线观看 | 日批视频网站 | 色七七在线 | 亚洲熟女少妇一区二区 |