国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

【已解決】onWebSocketConnect 和 SESSION 傳遞的問題

jackyxie

目前希望通過 不同的域名解析到同一個gateway 的地址, 希望通過onWebSocketConnect 獲取$_SERVER 信息做來源識別。但是遇到如下的情況:

  1. onWebSocketConnect 只能在 Gateway 或者 BusinessEvent 其中一個地方觸發(fā)。
    在 Gateway onConnect 的時(shí)候設(shè)置 onWebSocketConnect,設(shè)置$_SESSION 數(shù)據(jù),但是 BusinessEvent里面無法獲取到設(shè)置的$_SESSION數(shù)據(jù)。

  2. 在BusinessEvent里面設(shè)置的話,Gateway則不能存在onConnect和onWebSocketConnect,另外里面有一個BINARY_TYPE_ARRAYBUFFER 不知道在 BusinessEvent 是否可以設(shè)置,如何設(shè)置?
    $connection->websocketType = Workerman\Protocols\Websocket::BINARY_TYPE_ARRAYBUFFER;

更新問題1的根因和解決方式:
SESSION實(shí)際上是有傳遞的,我這里沒有獲取到的原因是設(shè)置$_SESSION沖突(不知道是否為框架的bug)
我在business里面的 onConnect 有設(shè)置$_SESSION['connect_time'] = xxx。此處經(jīng)調(diào)試,是會和 Gateway里面的onWebSocketConnect設(shè)置$_SESSION變量產(chǎn)生沖突,有點(diǎn)類似誰后執(zhí)行,就會完全覆蓋整個$_SESSION的值

3700 1 1
1個回答

phpcreeper

1、如果在gateway和events兩邊同時(shí)分別設(shè)置session,據(jù)我了解,events里的session會整體覆蓋掉gateway設(shè)置的session【框架里對過期的session處理用的是setSocketSession()】;
2、我本地嘗試擴(kuò)展了一個方法:

\GatewayWorker\Lib\Gateway::mergeSocketSession(Context::$client_id, $session_str_now);

替換掉了框架里/src/BusinessWorker.php原來的調(diào)用:

 \GatewayWorker\Lib\Gateway::setSocketSession(Context::$client_id, $session_str_now);

經(jīng)多次測試,暫未發(fā)現(xiàn)什么問題,你可以自己試試看,有2-3個文件都得同步修改下。
3、不過這到底是不是BUG,還是基于其他什么因素考慮,我不好說,還得等老大確定;

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??