• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            loop_in_codes

            低調(diào)做技術(shù)__歡迎移步我的獨立博客 codemaro.com 微博 kevinlynx

            飛秋lua版:luafeiq0.1.0發(fā)布

            繼上次搗鼓出了飛秋的群聊協(xié)議后,鑒于年底沒啥事情做,就用lua寫了個簡單的協(xié)議兼容的IM。本來開始讓

            另一個同事在iptux的基礎(chǔ)上修改的,結(jié)果大概是因為iptux的代碼不是那么容易修改,就不了了之了。這個

            剛發(fā)布的luafeiq功能非常簡單,僅支持與飛秋(包括大部分兼容IP messager的IM)進行單聊,群消息的

            收發(fā),簡易的消息盒子(暫存未讀消息)。因為選的庫都是跨平臺的,所以很容易的luafeiq也是跨平臺的,

            最主要的是我想在linux下使用。

             

            之所以選用lua,一方面是想練練lua,另一方面則是因為開發(fā)效率。前段時間在android下寫了些java代碼

            用java寫代碼覺得甚為爽快(當然算不了完美)。這幾天寫了千把行的lua(也許有3K行,未統(tǒng)計過),

            感覺也不錯。綜合來說,這些高級語言的很多好用的語法特性,例如閉包(closure),垃圾回收,都提高

            了不少寫代碼的速度。當然,lua于我而言也算不上完美的語言。例如我經(jīng)常因為變量敲錯字母,而在運行時

            才暴露nil錯誤。這也許可以通過諸如IDE之類的工具在寫代碼的時候就給予提示。lua 在遇到一個符號時,

            默認地將其處理為全局的。關(guān)于這個語法特性早有人提出不爽,只能說大家設計的準則不一樣。(在我們

            項目里,我直接改寫了全局變量的metatable,從而防止策劃隨意定義全局變量)

             

            再來談談實現(xiàn)過程中的一些瑣事。因為飛秋也算是IP messager協(xié)議的兼容實現(xiàn),很多通信除了可以使用

            抓包軟件分析外,還可以直接通過IP messager的源碼來了解。所以,基礎(chǔ)通信協(xié)議的實現(xiàn)過程也比較

            簡單。飛秋與飛秋之間發(fā)送私聊消息是經(jīng)過加密的。其加密過程也不簡單,更重要的是,我并不想浪費太

            多時間在這上面。后來發(fā)現(xiàn)其實可以通過上線消息里某個標志位表明自己不需要加密。這個標志就是消息頭

            里的option。上線廣播出去的消息里一旦表明自己不加密,那么以后和飛秋通信也就不需要解密了。

             

            發(fā)送私聊消息時,消息里會攜帶一個消息ID。這個ID可以通過任意算法生成,例如直接取time的值。接收到

            對方的消息時,需要取出該ID,然后加入回應消息。對方收到回應消息后,就知道自己發(fā)送成功。這個過程

            算是ip messager在UDP上做的消息可靠驗證,過程也比較簡單。

             

            群聊消息在之前提到過,是通過UDP多播實現(xiàn)。我們可以接收所有群的消息。如果之前已經(jīng)處于某個群里,

            那么一旦你上線后(廣播上線消息),你就可以直接在這個群里發(fā)言。但如果你之前不在這個群里,則

            可以通過多播一個加入群的消息,然后就可以不請自來地在這個群里發(fā)言。詳細的消息值和實現(xiàn)都可以從

            luafeiq的代碼里讀到(message_sender.lua)。

             

            在linux下接收windows上的飛秋消息,是需要做字符編碼轉(zhuǎn)換的。因為luafeiq使用IUP作為UI庫,IUP在

            linux下使用GTK作為底層實現(xiàn),默認全部是UTF8編碼。luafeiq里我自己寫了個lua庫,用于編碼轉(zhuǎn)換。

             

            話說IUP作為一個UI庫,還是比較不錯的。正如其介紹文檔里所說,學習曲線低,基本上看一會文檔,就可以

            直接使用了。luafeiq使用的IUP版本至少需要3.0以上。當初在linux下為了安裝IUP3.3,基本花了4個小時

            時間,各種奇怪的沒多大意義的錯誤信息。后來換成3.2版本,居然一下子就和諧了,無限怨念。

             

            luafeiq目前放在googlecode的版本,可以說是一個很不負責任的版本。早上我才剛把字符編碼轉(zhuǎn)換的代碼

            調(diào)試好。今天已經(jīng)請假,家里就一臺電腦,也就測試不了這個字符編碼轉(zhuǎn)換是否真的能正常工作。我在

            windows下dump了些字符,看上去能正常功能。明天得回老家過春節(jié),上不了網(wǎng),索性就提前發(fā)布了。

             

            luafeiq項目地址:http://code.google.com/p/luafeiq/

            posted on 2011-01-31 16:51 Kevin Lynx 閱讀(4545) 評論(2)  編輯 收藏 引用 所屬分類: lua

            評論

            # re: 飛秋lua版:luafeiq0.1.0發(fā)布 2011-02-01 15:51 G++

            沙發(fā)啊~!你們現(xiàn)在上班用這個哇??哈哈  回復  更多評論   

            # re: 飛秋lua版:luafeiq0.1.0發(fā)布 2011-04-26 13:04 inidalar

            學習學習,謝了  回復  更多評論   

            日本人妻丰满熟妇久久久久久| 久久国产乱子精品免费女| 亚洲精品高清一二区久久| 97久久天天综合色天天综合色hd| 精品久久久久久无码人妻蜜桃| 亚洲精品乱码久久久久久蜜桃图片 | 国产精品久久久久久久久鸭| 99久久精品国产综合一区| 99国产欧美久久久精品蜜芽| 精品欧美一区二区三区久久久| 色欲久久久天天天综合网| 国产精品永久久久久久久久久| 久久综合综合久久狠狠狠97色88| 国产综合久久久久| 国产亚洲精品自在久久| 午夜精品久久久久成人| 国产99久久久久久免费看| 亚洲中文字幕无码一久久区| 日韩欧美亚洲综合久久| 97久久婷婷五月综合色d啪蜜芽| 精品精品国产自在久久高清| 久久久久久久久久久| 国产精品久久久福利| 久久人妻无码中文字幕| 亚洲国产香蕉人人爽成AV片久久| 国内精品伊人久久久久影院对白| 国产Av激情久久无码天堂| 日日躁夜夜躁狠狠久久AV| 亚洲日本va中文字幕久久| 77777亚洲午夜久久多喷| 久久人人爽人人爽人人爽| 午夜精品久久久久久久无码| 亚洲v国产v天堂a无码久久| 久久夜色精品国产| 午夜天堂av天堂久久久| 久久亚洲AV成人无码| 99久久精品免费看国产一区二区三区 | 中文字幕乱码久久午夜| 亚洲国产精品高清久久久| 久久久女人与动物群交毛片| 国产精品伦理久久久久久|