4

chrome.socketChrome バージョン 25.0.1364.5 dev で APIを使用して TCP ソケットを使用しようとしています。

のドキュメントを見ると、chrome.socket.read新しいデータが読み取れるようになったときに通知を受け取る方法がないようです。

500ミリ秒ごとに読み取りコマンドをポーリングするTCPサーバーのサンプルコードがありますが、これは効率的/正確ではないと思います

// Start polling for reads.
setInterval(this._periodicallyRead.bind(this, socketId), 500);

さらに紛らわしいのは、「ネットワーク通信」のドキュメントのonEvent「データの受信」セクションに、特別なハンドラーをオプションとして渡すことができると記載されていることです。chrome.socket.create

このパラメーターは、ポートでデータが使用可能になったときに呼び出されるメソッドへの関数参照である 1 つの値「onEvent」を持つオブジェクトです。

この onEvent パラメータは次のように使用されます

chrome.socket.create(
    'udp', '127.0.0.1', 1337, 
    { onEvent: handleDataEvent }, // <-- call this when new data is available
    createHandler
)

しかし、これを使用しようとすると次のエラーが発生するため、これはUDP接続にのみ適用されるようです

Error: Invocation of form 
       socket.create(string, string, integer, object, function) 
       doesn't match definition 
       socket.create(string type, optional object options, function callback)

        at Object.normalizeArgumentsAndValidate (schemaUtils:119:11)
        at Object.<anonymous> (schema_generated_bindings:301:32)
        at chrome-extension://obljaojhdffbpcdfbeoiejegaodfoonp/background.js:11:15
        at chrome.Event.dispatchToListener (event_bindings:387:21)
        at chrome.Event.dispatch_ (event_bindings:373:27)
        at dispatchArgs (event_bindings:249:22)
        at Object.app.runtime.onLaunched (app.runtime:116:7)
        at Object.chromeHidden.Event.dispatchEvent (event_bindings:255:35) 

問題は、このようなことを TCP 接続で実現できるかということです。readxミリ秒ごとにメソッドをポーリングする代わりに?

アップデート

これは、ドキュメントやイベントのサポートが改善されるまで、私が使用している回避策です。

function onReadHandler(readInfo) {
     // do things with data
     // ....

     // re register handler with callback itself
     chrome.socket.read(socketId,null,onReadHandler);         
}

chrome.socket.read(socketId,null,onReadHandler);
4

1 に答える 1

3

TCP 接続の場合、socket.read に渡されたコールバックは、利用可能な新しいデータがある場合にのみ実行されます。上記のサンプル コードは、setInterval の代わりにコールバックのみを使用するように修正されました。

ネットワークのドキュメントは確かに古くなっているため、更新に向けて懸命に取り組んでいます。API が急速に変化する最近の時代にドキュメントが古くなるリスクを回避したい場合は、常にAPI リファレンス ドキュメントを確認する必要があります。これらはコードから直接生成され、編集作業は必要ありません。「ハック」と感じている場合:-) Chromiumソース コードの API 定義を直接見ることもできます(これはソケット API 用です) 。

最後になりましたが、Sublime Textユーザー向けにSublime Chrome Apps and Extensions pluginがあります。まだ完成していませんが、コード補完、CSP 検証、およびブートストラップ用のボイラープレートを既に取得できます。Sublime Package Managerからインストールします。

于 2013-01-09T21:26:14.133 に答える