Pomelo雜記(一)

一、通信類
-------------------------------------

目前Pomelo服務器提供兩類connector:sioconnector和hybridconnector,分別對於基於socket.io和二進制的通信。
1.1 sioconnector
支持基於socket.io的通信協議,也是Pomelo框架默認採用的connector(主要是兼容老版本)。以前基於socket.io的服務器和客戶端代碼不用修改就可使用(默認使用)。

1.2 hybridconnector

支持socket和websocket,使用二進制通信協議,而且支持route字典壓縮和protobuf壓縮的connector,須要在app.js中顯式配置。

-------------------------------------

二、通方式類
-------------------------------------

pomelo的客戶端和服務器之間的通信能夠分爲三種:

    request-response
    pomelo中最經常使用的就是request-response模式,客戶端發送請求,服務器異步響應。客戶端的請求發送形式相似ajax相似:
    pomelo.request(url, msg, function(data){});
    第一個參數爲請求地址,完整的請求地址主要包括三個部分:服務器類型、服務端相應的文件名及對應的方法名。第二個參數是消息體,消息體爲json格式,第三個參數是回

調函數,請求的響應將會把結果置入這個回調函數中返回給客戶端。

    notify
    notify與request—response相似,惟一區別是客戶端只負責發送消息到服務器,客戶端不接收服務器的消息響應。
    pomelo.notify(url, msg);

    push
    push則是服務器主動向客戶端進行消息推送,客戶端根據路由信息進行消息區分,轉發到後。一般遊戲服務器都會發送大量的這類廣播。
    pomelo.on(route, function(data){});

以上是javascript的api, 其它客戶端的API基本與這個類型。因爲API與ajax極其相似,全部web應用的開發者對此都不陌生。

-------------------------------------

三、會話機制Session

-------------------------------------

SessionService 是隻存在於前端服務器(frontend),session 以每一個客戶端請求自增1的形式生成 ,用於管理鏈接 pomelo的客戶端,若是在前端服務器不進行相關控制對於每一個請求都會產生一個Session,就是說客戶端都會在前端的服務器(frontend)裏的sessionService產生一個會話,值得注意的是自pomelo0.4.x支持了支持同一帳號多處登陸,因此seesionService 裏面的session 對應的是一個session數組,若是,對session不作任何處理的話,沒刷新一次頁面,都會對這個session 數組自增 1.從暴露的api,咱們能夠看出,這個SessionService 能夠用於對鏈接在前端服務器的客戶端,踢下線,或者利用session id 直接在前端服務器發消息給客戶端。

LocalSessionService 因爲SessionService只存在於前端服務器(frontend),若是想在後端服務器(Backend)操做SessionService的話,就須要一個代理類(由於這是兩個進程),從源碼中能夠看到,這個就是從前端服務器複製出來用於backend進行操做的SessionService,主要用於獲取踢客戶端下線,或者獲取相關客戶端Session Id。

LocalSession 是用於咱們自定義的id 與全局 sessionService進行管理的類。主要用於服務端對客戶端之間會話的管理。

從api 文檔暴露的接口咱們能夠得知主要做用:

    讓咱們自定義的id 能夠綁定到客戶端與服務端之間的會話,用於管理客戶端的狀態。例如,利用綁定的id實現控制對客戶端進行踢掉,監聽session的關閉事件。

    localSession 還提供了一個K/V 的數據存取操做 須要用push或者pushAll 對sessionSerive進行更新。可是,根據官方的回覆,不建議把session當作內存庫。

通常狀況下session在connector裏面賦值,供他服務器使用,後端服務器session爲localsession

-------------------------------------

四、handler接口

-------------------------------------

handler接口固定:function(msg,session,next)

msg爲客戶端要傳遞的參數,格式爲json

session由pomelo自動傳遞

next(null,{route:msg.route}),null表明錯誤信息,沒錯誤信息,就返回null

-------------------------------------

五、remote接口

-------------------------------------

remote接口不固定用於服務器之間通訊

-------------------------------------


javascript

相關文章
相關標籤/搜索