На сервере запустите это, чтобы фактически принимать удаленные соединения:
var server = require('http').createServer().listen(8080);
var gun = Gun({web: server});
На клиенте запустите это для подключения к вашему серверу:
var gun = Gun({peers: ["http://server-ip-or-hostname:8080/gun"]})
В качестве примечания, даже если вы устанавливаете sh одноранговое соединение для получения ваших данных, вам все равно нужно обрабатывать undefined
, поскольку once()
может срабатывать несколько раз при поступлении данных.
Соответствующие ссылки:
РЕДАКТИРОВАТЬ: Чтобы быть более точным в отношении моего примечания выше - обратный вызов once
на вашем клиенте получение undefined
для нелокальных данных фактически задуман . Это означает, что у клиента еще нет запрошенных данных. Однако он будет запрашивать его у своих коллег, которые попытаются ответить тем, что они сами могут решить (локально или у своих соответствующих коллег). Эти ответы снова вызовут обратный вызов (я думаю, что если они прошли через алгоритм CRDT).
Получение undefined
на клиенте также может означать ответ сервера мог истечь , и GUN посчитал его без ответа. Вы можете продлить время ожидания с помощью .once(callback_function, {wait: time_in_miliseconds})
.
. Согласно ответу Хадара, попробуйте использовать on()
вместо once()
, чтобы смягчить условия гонки , т.е. ваш клиент запрашивает данные у сервер, прежде чем вы на самом деле написали это. Как только вы получили свои данные и не хотите больше обновлений, вы можете отказаться от подписки с помощью gun.get('servertest').off()
Кроме того, следует отметить, что экземпляры GUN не связаны магическим образом ; соединение двух из них не означает, что они одинаковы в любом случае. Концептуально они являются партнерами в распределенной системе, что в случае GUN дает вам возможную согласованность со всеми ограничениями и компромиссами, связанными с этим.