[英]Create a persistent bash shell session in Node.js, know when commands finish, and read and modify sourced/exported variables
[英]How to create persistent queries in JCEF
我有一個混合應用程序,我在其中使用JCEF (java 鉻嵌入式框架)。
使用 JCEF 的 IPC 功能設置一個簡單的訂閱系統。 其中之一是消息路由。
里面相關的 class ( CefMessageRouter.java )。 它討論了一些用例:
// Some possible usage patterns include:
//
// 1.One-time Request. ...
// 2.Broadcast. ...
// 3.Subscription. Use a persistent query to register as a JavaScript subscription
// receiver. The Handler initiates the subscription feed on the first request
// and delivers responses to all registered subscribers as they become
// available. The Handler cancels the subscription feed when there are no
// longer any registered JavaScript receivers.
第三個選項是我想要的。 如您所見,它需要持久查詢。
在我的主要 class 中:
CefMessageRouter msgRouter = CefMessageRouter.create(new CefMessageRouterConfig("cefQuery", "cefQueryCancel"));
msgRouter.addHandler(new MessageRouterHandler(), isTransparent);
client_ = cefApp_.createClient();
client_.addMessageRouter(msgRouter);
MessageRouteHandler.java
//imports...
public class MessageRouterhandler implements CefMessageRouterHandler{
@Override
public void setNativeRef(String identifer, long nativeRef) {}
@Override
public long getNativeRef(String identifer) { return 0;}
@Override
public boolean onQuery(CefBrowser browser, CefFrame frame, long queryId, String request, boolean persistent,
CefQueryCallback callback) {
callback.success("{\"by\": \"cat\", \"message\": \"I hate you\"}");
callback.success("{\"by\": \"dog\", \"message\": \"I love you\"}");
return true;
}
@Override
public void onQueryCanceled(CefBrowser browser, CefFrame frame, long queryId) {}
}
來自 javascript
window.cefQuery({
request: 'get-data',
persistent: true,
onSuccess: function(response) {
console.log(response)
},
onFailure: function(error_code, error_message) {
console.log(error_code+":"+error_message);
}
})
通過此設置,我除了進入控制台之外:
{"by": "cat", "message": "I hate you"}
{"by": "dog", "message": "I love you"}
我實際得到的是:
{"by": "cat", "message": "I hate you"}
我不明白為什么因為文檔說:
// If the query is persistent then the callbacks will remain registered until one of the
// following conditions are met:
//
// A. The query is canceled in JavaScript using the |window.cefQueryCancel|
// function.
// B. The query is canceled in C++ code using the Callback::Failure function.
// C. The context associated with the query is released due to browser
// destruction, navigation or renderer process termination.
就我而言,似乎沒有滿足任何條件。 但是回調不會保持注冊狀態。
這是一個錯誤還是我遺漏了什么? 如果這是一個錯誤。 我可以探索其他選擇嗎?
剛發現有像我這樣的人在持久查詢方面遇到同樣的問題。 這個問題有問題: https://bitbucket.org/chromiumembedded/java-cef/issues/186
一個查詢只能有一個響應。 因此,您的第二個 success() 調用將被忽略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.