Abonnementmuster mit Websockets oder IPC?

Also habe ich die web3-API aus dem NodeJS-Modul „web3“ sehr gerne verwendet und sie funktioniert sehr gut (sie verwendet den HTTP-Transport AFAIU). Aber jetzt möchte ich Ereignisse vom Server erhalten (ohne Abfrage), und dafür muss ich anscheinend die Abonnement-API verwenden .

Die Dokumentation, die ich gerade verlinkt habe, besagt jedoch, dass Abonnements eine Vollduplex-Verbindung erfordern. Geth bietet solche Verbindungen in Form von Websockets (mit --ws aktivieren) und IPC (standardmäßig aktiviert) an . Fair genug.

Aber für mein ganzes Leben kann ich dort draußen kein Beispiel finden, wie man eine Verbindung über IPC/WebSockets herstellt. Wenn die Dokumentation ein einfaches Hallo-Welt-Beispiel eines Abonnements enthalten würde, wäre es krass.

Ich habe es nicht versucht, aber web3 ipc scheint das zu sein, was Sie brauchen npmjs.com/package/web3_ipc

Antworten (3)

Sie können auch netcat verwenden:

➜  ~  nc -U /home/XXX/.ethereum/geth.ipc
{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":1}
{"jsonrpc":"2.0","id":1,"result":"0xeeeeeeeeeeeeeeeeeeeeededededede"}
wie wäre es mit nodejs? :) (Wenn Sie js-Beispiel zur Verfügung stellen, werde ich alle Ihre 3 Antworten positiv bewerten :))
Es tut mir leid, dass ich dafür js-Bibliotheken nicht gut genug kenne, aber ich bin mir ziemlich sicher, dass andere einen Weg finden werden;)
@knocte, ihn bestechen? Haben Sie js-Beispiel gefunden? Wenn du mir schickst, werde ich deine Antworten positiv bewerten ;)

Beim Herumhacken habe ich mich in Python auf diese Weise verbunden, ziemlich einfach:

➜  ~ ipython2
Python 2.7.11+ (default, May  9 2016, 15:54:33)
Type "copyright", "credits" or "license" for more information.

IPython 4.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import socket

In [3]: s=socket.socket(socket.AF_UNIX,socket.SOCK_STREAM)

In [4]: s.connect("/home/XXX/.ethereum/geth.ipc")

In [5]: message = '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":1}'

In [6]: s.send(message)
Out[6]: 60

In [7]: s.recv(1024)
Out[7]: '{"jsonrpc":"2.0","id":1,"result":"0xeeeeeeeeeeeeeeeeeeeeededededede"}\n'

Beim Durchsuchen scheint diese Bibliothek genau das zu tun, was Sie wollen, aber in Python

web3 hat Anbieter für IPC und Websockets

http://web3js.readthedocs.io/en/1.0/web3.html#providers

Sie können es einfach mit verwenden

const web3 = new Web3(new Web3.providers.IpcProvider(/path/to/.ipc, net))