chrome.socket
Chrome バージョン 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 接続で実現できるかということです。read
xミリ秒ごとにメソッドをポーリングする代わりに?
アップデート
これは、ドキュメントやイベントのサポートが改善されるまで、私が使用している回避策です。
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);