をアドバイスしてください。
これは、アプリケーションが必要なものを入力できる不透明(CometDの観点から)マップです。
クライアントからサーバーにデータを送信する場合は、この追加データをハンドシェイクメッセージに入れて、BayeuxServer.SessionListener.sessionAdded()
が呼び出されたときにメッセージからデータを取得することができます。
クライアントは次のようになります。常に下にデータを置くために非常に良い方法です
{
"ext": {
"com.acme": {
"token": "foobar"
}
}
}
:
BayeuxClient client = ...;
Map<String, Object> extraFields = new HashMap<>();
Map<String, Object> ext = new HashMap<>();
extraFields.put(Message.EXT_FIELD, ext);
Map<String, Object> extraData = new HashMap<>();
ext.put("com.acme", extraData);
client.handshake(extraFields);
extraData.put("token", "foobar");
これはJSONで次のようになり、余分なデータ構造を作成しますcom.acme
などの名前空間を使用しているため、CometDフィールドや他の拡張機能と混同しないようにしてください。 上記の例のフィールドtoken
のように、フィールドをextraData
の内側に置きます。
その後、サーバー上:
public class MySessionListener implements BayeuxServer.SessionListener {
@Override
public void sessionAdded(ServerSession session, ServerMessage message) {
Map<String, Object> ext = message.getExt();
if (ext != null) {
Map<String, Object> extra = (Map<String, Object>)ext.get("com.acme");
if (extra != null) {
String token = (String)extra.get("token");
session.setAttribute("token", token);
}
}
}
@Override
public void sessionRemoved(ServerSession session, boolean timedout) {
}
}
このリスナーはtoken
フィールド上の例では、クライアントから送信されてきたセッション属性データになります。
次に、アプリケーションの他の場所で、セッション属性にアクセスしてそのデータを使用できます。