尝试chrome.socket
在 Chrome 版本 25.0.1364.5 dev 上使用 API 使用 TCP 套接字。
查看文档chrome.socket.read
似乎没有办法在有新数据可供读取时获得通知。
TCP 服务器有一些示例代码,它每 500 毫秒轮询一次读取命令,但我认为这不会高效/准确
// Start polling for reads.
setInterval(this._periodicallyRead.bind(this, socketId), 500);
更令人困惑的是,在“接收数据”部分下的“网络通信”文档中,声明可以将特殊处理程序作为onEvent
选项传递chrome.socket.create
该参数是一个具有一个值“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 Connections 来实现吗?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);