Javet implements a node-flavored remote target protocol to communicate with Chrome DevTools.
Connection Details:
- Default Port:
9229. - Target Discovery: CDT queries
http://127.0.0.1:9229/json/list to find remote targets. Javet identifies itself as a node-flavored target via this endpoint. - WebSocket Address:
ws://127.0.0.1:9229/javet. - Protocol Version: Javet currently uses v1.3 of the Chrome DevTools Protocol.
Handshake Process:
CDT connects via WebSocket and sends a sequence of 8 messages to complete the handshake. The final message, Debugger.runIfWaitingForDebugger, signals the completion of the handshake. In Javet, this completion is exposed as a callback in the IV8InspectorListener interface.
// Sequence of handshake messages exchanged between Chrome and Javet
Chrome: {"id":1,"method":"Runtime.enable","params":{}}
Javet Notification: {"method":"Runtime.executionContextCreated","params":{"context":{"id":1,"origin":"","name":"Javet Inspector 00000000","uniqueId":"00000000.00000000"}}}
Javet Response: {"id":1,"result":{}}
Chrome: {"id":2,"method":"Debugger.enable","params":{"maxScriptsCacheSize":100000000}}
Javet Response: {"id":2,"result":{"debuggerId":"00000000.00000000"}}
Chrome: {"id":3,"method":"Debugger.setPauseOnExceptions","params":{"state":"none"}}
Javet Response: {"id":3,"result":{}}
Chrome: {"id":4,"method":"Debugger.setAsyncCallStackDepth","params":{"maxDepth":32}}
Javet Response: {"id":4,"result":{}}
Chrome: {"id":5,"method":"Profiler.enable","params":{}}
Javet Response: {"id":5,"result":{}}
Chrome: {"id":6,"method":"Runtime.getIsolateId","params":{}}
Javet Response: {"id":6,"result":{"id":"00000000"}}
Chrome: {"id":7,"method":"Debugger.setBlackboxPatterns","params":{"patterns":[]}}
Javet Response: {"id":7,"result":{}}
Chrome: {"id":8,"method":"Debugger.runIfWaitingForDebugger","params":{}}
Javet Response: {"id":8,"result":{}}