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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[笨木头FireFly01]入门篇1·最简单的服务端和客户端连接

發布時間:2024/3/12 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [笨木头FireFly01]入门篇1·最简单的服务端和客户端连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一直在寫游戲,幾乎沒有來寫教程了,打算放慢一下腳步,學學新東西。

為嘛我要學FireFly呢?

?

前我自己寫了一個網絡游戲,服務端和客戶端都自己寫,雖然運行起來沒什么大礙,但畢竟我對服務端沒什么經驗,自己寫的服務端安全性和擴展性不太行,穩定性自然也不靠譜(即使它還沒有出現問題)。

?

好,最近FireFly這個開源的游戲服務器引擎出來了,雖然還不太完善,但是覺得還不錯,起碼我用是足夠了~無奈,FireFly的文檔和demo奇缺,雖然有幾個大項目的demo,但對于初學PythonFireFly的我來說,我更需要的是文檔以及小demo

?

好吧,別人是免費貢獻的,我不能要求太多,現在只好自己硬著頭皮一點點研究了。


聲明:

本教程基于FireFly1.2.2版本、Python2.7版本。

本教程面向PythonFireFly初學者中的初學者(比如我)

本教程由笨木頭花心貢獻,花心?不,是用心~

轉載請注明原文地址:http://www.benmutou.com/blog/archives/718


FireFly是游戲服務器引擎,那自然就是用來開發網游了,本教程的目的是使用它,不是解剖它,所以,我們最先要了解的就是,怎么創建服務端和客戶端,并且連接上。

?

1.?客戶端

為什么先寫客戶端?因為它比較簡單。

OK,上代碼(client.py)

#coding:utf8from?socket?import?AF_INET,?SOCK_STREAM,?socketif?__name__?==?'__main__':HOST?=?"localhost"??#?服務端地址PORT?=?1000?????????#?服務端端口ADDR?=?(HOST,?PORT)client?=?socket(AF_INET,?SOCK_STREAM)???#?創建socket,TCPclient.connect(ADDR)????????????????????#?連接服務器while?True:pass

這就是FireFly的最簡單的一個客戶端實現...(小若:才怪~!這明顯就是沒有用到FireFly的任何東西!)

哦呵呵呵,那當然是沒有用到FireFly的東西了,人家FireFly可是專業搞服務端的。

?

,因為本教程面向Python初學者,稍微解釋一下代碼。

第一行,你以為我想說的是from?import?錯了~!是#coding:utf8,這是聲明代碼用的編碼格式,它有什么用?你應該反過來,沒了它會怎么樣?大家自己試試就知道了,反正沒了它我運行不了代碼,提示編碼格式的問題。

?

于是,第二行,from?import的東西,這就是導入,類似于Javaimport語句以及C++include,詳情請玩一遍Python新手指導(有中文的)~

?

后,那個什么?if?__name__?==?‘__main__’又是什么意思?可以理解為入口函數,只要這個py文件是直接運行的,它的__name__屬性的值就是__main__。反正就是在運行這個py文件的時候開始要做的事情。

?

后,創建socket,然后連接服務器,反正這些用的是PythonAPI或者是第三方庫,細節就不管了。Socket創建的方式默認大家已經有所了解(小若:不了解),哦呵呵呵,不了解的話,那怎么寫服務端呢?~度娘會幫你的~

?

2.服務端

喂,如果你覺得剛剛的客戶端有點難度的話,那恭喜你了,接下來的服務端更難了(小若:那我走了,關瀏覽器)

?

2.1?一個Python的網絡框架-Twisted

據說Twisted是一個很強大的網絡框架,用Python寫的,并且是開源的。FireFly使用了它。

我自己也還沒有深入了解,所以不深入了。

?

2.2?Service-服務

Service(服務)是一個什么東西呢?就我個人的理解,它用于處理客戶端發過來的數據,但它并不是去解析這些數據,不是去處理什么分包粘包。它只是處理邏輯,也就是數據解析后要進行的操作的判斷。

算,這些都不仔細說,以后等我研究清楚了再說,免得害人,嘿嘿。

?

2.3?LiberateFactory-協議工廠

協議工廠就是專門處理通信數據的了,按照FireFly其中一個教程帖子的說明,協議工廠主要處理如下的事情:服務端與客戶端通信的一些處理方法,包括發送數據的封裝,協議頭的封裝,tcp通信時進行分包,處理粘包問題。

?

協議工廠可以綁定一個Service服務,這樣,當數據包解析好之后,就可以傳給Service進行下一步的游戲邏輯處理。(小若:如果你覺得我已經聽懂了的話,你就繼續說,我閃人~!)

?

,我相信大家已經蒙了。

服務端大致的流程是這樣的:

1)利用Twisted框架來處理網絡方面的事情,最直白的就是監聽端口,然后客戶端才能連上服務器

2)客戶端的數據到達時,LiberateFactory協議工廠就會開始解析

3)數據解析完了,就丟給Service服務來處理,比如是登錄請求還是戰斗請求什么的。

?

2.5?看代碼

廢話嘮叨完了,來看看代碼吧:


#coding:utf8import?osimport?sysfrom?firefly.netconnect.protoc?import?LiberateFactoryfrom?firefly.utils?import?servicesfrom?twisted.internet?import?reactorfrom?twisted.python?import?logif?os.name!='nt':#對系統的類型的判斷,如果不是NT系統的話使用epollfrom?twisted.internet?import?epollreactorepollreactor.install()if?__name__?==?'__main__':#?有了它,就能看到日志的輸出log.startLogging(sys.stdout)#?服務,我個人理解為對客戶端數據的邏輯處理service?=?services.Service("testService")#?處理數據封裝、協議頭封裝、分包、粘包處理的類factory?=?LiberateFactory();#?關于twisted的知識,暫時忽略吧,我也還沒研究,是一個Python的網絡框架reactor?=?reactor#添加服務通道factory.addServiceChannel(service)#?開始監聽端口reactor.listenTCP(1000,?factory);reactor.run()

開頭判斷NT系統的,就不管了,因為我還沒了解Twisted。

?

來看看整個服務的啟動流程:

1)?創建一個Service服務對象,參數是服務名字,自己隨便取就好

2)?創建LiberateFactory協議工廠

3)?給協議工廠添加一個服務,也就是我們上面創建的service

4)?開始監聽端口,傳入factory對象,用于處理發送過來的數據

?

了,這是一個服務端的最基本要有的東西?,F在,大家先運行服務端,使用Eclipse作為IDE的就按Ctrl+F11,使用Python自帶編輯器的,就按F5。

于是,我們會看到類似下面的日志輸出:

2013-10-08?11:31:47+0800?[-]?Log?opened.

2013-10-08?11:31:47+0800?[-]?LiberateFactory?starting?on?1000

2013-10-08?11:31:47+0800?[-]?Starting?factory?<firefly.netconnect.protoc.LiberateFactory?instance?at?0x0000000002F4C508>

這就成功了,然后,運行客戶端,服務端會輸出以下日志:

2013-10-08?11:32:35+0800?[firefly.netconnect.protoc.LiberateFactory]?Client?0?login?in.[127.0.0.1,6297]

?

?

美,這就是我們對FireFly的初體驗了。

?

再次聲明,我也是剛接觸FireFlyPython,請帶著批判的眼光看待本文,本文為木頭個人學習記錄,僅供參考。


總結

以上是生活随笔為你收集整理的[笨木头FireFly01]入门篇1·最简单的服务端和客户端连接的全部內容,希望文章能夠幫你解決所遇到的問題。

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