Andrey07071977 18 Опубликовано 28 Декабря 2011 (изменено) Полтергейст, интересная находка, выкладывай что накопаешь. Если можно несколько примеров - как тестировал, использовал. Изменено 28 Декабря 2011 пользователем Andrey07071977 Поделиться этим сообщением Ссылка на сообщение
Andrey07071977 18 Опубликовано 1 Августа 2013 Кто то может доходчиво объяснить что такое tail packet? Поделиться этим сообщением Ссылка на сообщение
Andrey07071977 18 Опубликовано 1 Августа 2013 (изменено) @Malandrinus, в контексте работы с нет пакетами кусок кода из xs_store --write variable to tail tail_pk:w_u8(allowed_types_rev[lua_type]) tail_pk:w_stringZ(key) if lua_type=='string' then tail_pk:w_stringZ(val) elseif lua_type=='number' then tail_pk:w_float(val) elseif lua_type=='boolean' then tail_pk:w_u8(val) elseif lua_type=='table' then tail_pk:w_stringZ(serialized_tables[key]) end Пытаюсь настроить твой ogse_unist в ЗП но ловлю вылеты типа: ... not enough storage to process the command... ... not enough memory ... Вылет происходит гдето в pk:get(), но пока не знаю точно где. Решил помотреть как xStream сделала и наткнулся на tail packets. Artos также их использует П.С> вылетает не всегда, примерно через раз Вот функция из модуля для работы с пакетами function net_base:get() if not (self.obj and self._mode ~= 0) then return {} end --/> zero dlog("(%s) in net_base:get()", self_name) --/ preparation local stpk,uppk = nil,nil local stsz,upsz = 0,0 if bit_and(self._mode, 1) ~= 0 then stpk = net_packet() dlog("(%s) in net_base:get() got empty packet stpk = net_packet()", self_name) -- stpk:w_begin(0) --/ installation in the package beginning (+2) stpk:w_begin() self.obj:STATE_Write(stpk) stpk:r_seek(2) --/ installation of the beginning (+2) of reading stsz = stpk:r_tell() end dlog("net_base:get:(%s)%s):m(%s)/st(%s)/up(%s):[%s]", self.obj:name(), self.name, self._mode, self._can_st, self._can_up, ">") if bit_and(self._mode, 2) ~= 0 then uppk = net_packet() uppk:w_begin(0) --/ installation in the package beginning (+2) self.obj:UPDATE_Write(uppk) uppk:r_seek(2) --/ installation of the beginning (+2) of reading upsz = uppk:r_tell() end local t = {} if uppk ~= nil then t.upd = {} --/ sub-table for update-propeties end --/ read if self.dbg then log("net_base:get:(%s)%s):m(%s)/st(%s)/up(%s):[%s]", self.obj:name(), self.name, self._mode, self._can_st, self._can_up, ">") end --/#~# self:_read(t, stpk, uppk) if self.dbg then log("net_base:get:(%s)%s):m(%s)/st(%s)/up(%s):[%s]", self.obj:name(), self.name, self._mode, self._can_st, self._can_up, "<") end --/#~# --/ check state size and tail if stpk ~= nil then self.size = stpk:r_tell() - stsz if not stpk:r_eof() then --/ exist left? t.__tail = tail_data():peekFrom(stpk) t.__tail_size = t.__tail.pk:w_tell() - t.__tail.pk:r_tell() if true or self.dbg then log("net_base:get:obj=[%s]%s):mode=[%s]:tail(st)=[%s]:<%s>", self.obj:name(), self.name, self._mode, t.__tail_size, "Info!") end --/#~# end end --/ check update size and tail if uppk ~= nil then self.size_upd = uppk:r_tell() - upsz if not uppk:r_eof() then --/ exist left? t.upd.__tail = tail_data():peekFrom(uppk) t.upd.__tail_size = t.upd.__tail.pk:w_tell() - t.upd.__tail.pk:r_tell() if true or self.dbg then log("net_base:get:obj=[%s]%s):mode=[%s]:tail(up)=[%s]:<%s>", self.obj:name(), self.name, self._mode, t.upd.__tail_size, "Info!") end --/#~# end end dlog("(%s) net_base:get() succes, return size = %s", self_name, table.size(t)) return t --/> end После того как изменил -- stpk:w_begin(0) --/ installation in the package beginning (+2) на stpk:w_begin() вроде бы перестало вылетать... thoughts? Изменено 1 Августа 2013 пользователем Andrey07071977 Поделиться этим сообщением Ссылка на сообщение