我是不熟悉rx的人,从我的读物开始,应该避免使用Subject
s。但是我不确定如何避免在这里使用主题。
我有代表消息的字节流。每个消息包的格式为2字节长的前缀+消息,或者:
<2 byte length>< message with length from prefix >
我的解决方法是:
def get_first_message(obs):
'''Get the first message from the stream'''
return obs.take(2)\
.buffer_with_count(2)\
.map(lambda l_arr: int(''.join(l_arr)))\
.first_or_default()\
.filter(lambda x: x is not None)\
.flat_map(lambda x: obs.take(x).buffer_with_count(x).first())
def get_messages(obs):
'''Parse stream into messages'''
window_openings = Subject()
return obs.window(window_openings=window_openings)\
.flat_map(lambda w: get_first_message(w))\
.tap(on_next=lambda x: window_openings.on_next(x))