簡單的答案是沒有我們做不到的......
的方式解析工作,它可能需要回滾到輸入字符串的一部分之前,它實際上可能是頭當它滿足流的最後一個字符時,完整輸入。
端口將數據複製到字符串緩衝區,因爲他們從端口獲取輸入,所以事實上,從來沒有任何「先前」字符串用於解析回滾到。它就像量子物理學......只是看着它,它不在那裏了。
但是正如你所知道的那樣......不,不是一個答案。 ;-)
這就是說,有一種方法來解析數據從端口作爲它被抓住,但它的一點點工作。
你要做的就是用一個緩衝區,
APPEND buffer COPY/part connection amount
根據您的數據量可能是1個字節或1KB,使用情理之中的事情。
一旦新的輸入被添加到您的緩衝區,解析它並添加邏輯知道您是否匹配該緩衝區的部分。
如果某些東西正確匹配,則刪除/分配與緩衝區匹配的內容,然後繼續解析,直到解析爲止。
然後重複上述步驟直到輸入結束。
我已經在一個實時的EDI tcp服務器中使用這個服務器,它有一個「永遠在線」的tcp端口,以分解一個(可能)連續的輸入數據流,它實際上將端到端的信息捎帶回。
細節
設置的最佳方式本系統是使用/無等待和循環,直到端口關閉(你收到沒有,而不是「」)。
還要確保在解析時你有辦法檢查數據完整性問題(如跳過的字節或錯誤的消息),否則,您將永遠不會到達最後。
在我的系統中,當緩衝區超過了特定的大小時,我嘗試了一個替代規則,它跳過了字節,直到模式的可能在該流的更下方找到。如果找到了一個,則會記錄一個錯誤,存儲部分消息併爲系統管理員提出警報以整理消息。
HTH!
也許你應該在CureCode數據庫中添加一個心願:http://curecode.org/rebol3/ – Oldes 2010-11-27 11:22:29