Образец подписки с использованием веб-сокетов или IPC?

Так что я очень счастливо использовал API-интерфейс web3 из модуля «web3» NodeJS, и он работает очень хорошо (он использует HTTP-транспорт AFAIU). Но теперь я хочу получать события от сервера (без опроса), и для этого, похоже, мне нужно использовать API подписки .

Однако в документации, которую я только что связал, указано, что для подписки требуется полнодуплексное соединение. Geth предлагает такие соединения в виде веб-сокетов (включается с --ws) и ipc (включено по умолчанию) . Справедливо.

Но, на всю жизнь, я не могу найти ни одного примера того, как подключиться через IPC/WebSockets. Если бы документация включала простой образец подписки на приветствие, это было бы здорово.

Я не пробовал, но web3 ipc, кажется, то, что вам нужно npmjs.com/package/web3_ipc

Ответы (3)

вы также можете использовать netcat:

➜  ~  nc -U /home/XXX/.ethereum/geth.ipc
{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":1}
{"jsonrpc":"2.0","id":1,"result":"0xeeeeeeeeeeeeeeeeeeeeededededede"}
как насчет использования nodejs? :) (если вы предоставите образец js, я поддержу все ваши 3 ответа :))
извините, я недостаточно хорошо знаю js-библиотеки для этого, но я уверен, что другие найдут способ;)
@knocte, подкупишь его? Вы нашли образец js? если вы пришлете мне, я проголосую за ваши ответы;)

взломав, я подключился к python таким образом, довольно просто:

➜  ~ 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'

все еще просматривая, кажется, что эта библиотека предназначена для того, чтобы делать именно то, что вы хотите, но в python

web3 имеет провайдеров для IPC и веб-сокетов

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

Вы можете использовать его просто с

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