а именно о его клиентской части - netbox коннекторе. Тикет: https://github.com/tarantool/tarantool/issues/2677. С прошлым обсуждением было решено, что в нетбокс запросе можно будет в опциях указать on_push колбек вот так:
c:call('function', {args}, {on_push = my_callback})
1. Но что делать, если on_push не указан - игнорировать сообщения? Или пытаться их как-то вернуть? Если нужно вернуть, то тут проблема - метод нетбокса (call, replace, insert ...) в таком случае будет возвращать то только результат вызова, как сейчас, то результат вызова + сообщения. И это не совместимо с netbox.call - он уже итак возвращает произвольное число значений, прямо как вызванная им функция. Я за то, чтобы в таком случае сообщения игнорировать. Готов выслушать другие мнения.
2. Недавно был пушнут асинхронный нетбокс - это когда с любым запросом можно передать флаг is_async, и он моментально вернет объект future вместо блокирования файбера. Потом по этому future можно получить результат. Как подружить это с пушами? Продолжать передавать коллбек? Или может тогда запретить его, и сделать, что future становится итерируемым объектом? То есть либо on_push ~= nil, либо is_async = true, либо ни того, ни другого.
Например:
future = netbox.call('function', {args}, {is_async = true})
for i, msg in pairs(future) do
-- process message ...
end
UP
UP
UP
по поводу этого: 1) пуши, которые не зарегистрированы будут удаляться, нет? то есть сервер может прислать сообщение которое мы не ожидаем и обрабатывать надо только те, с каким sync'ом они зарегистрированы. кажется игнорирование/глобальный коллбек (на незарегистрированые пуши) - может логичный вариант 2) имхо :wait() должен возвращать первый же объект в очереди (с возможностью висеть неограниченое кол-во раз, можно назвать это :wait_next(), в противовес :wait() который будет возвращать все полученные по этому синку сообщения), а при GC объекта future это-вот все пропадает. второе поведение с коллбеками - оно будет до бесконечности висеть и ждать разных сообщений по данному соединению с данным синком BTW: pairs(future) работать не будет, в LuaJIT без COMPAT52 не будет работать __pairs и __ipairs метод (разве что сам объект future будет без полей)
Обсуждают сегодня