我正在測試我使用libuv開發的簡單服務器體系結構。 每當服務器從客戶端收到一些東西時,它就會按'\ r'分割主體並向所有觀察者廣播每條消息。多個同時調用uv_write有時不起作用
然後,我用來測試的觀察者使用相同的原始消息(回顯服務器)調用server-> write()方法。
問題是,每次運行程序時,它都會隨機地運行或不運行。
當它不工作,該錯誤信息是:
Assertion failed: (req->write_index < req->nbufs), function uv__write, file src/unix/stream.c, line 869. Abort trap: 6
全部代碼是在這裏:https://github.com/ghostec/film
大部分代碼是在這個文件中:https://github.com/ghostec/film/blob/master/server/server.cpp
編輯:顯然這與uv_queue_work內部調用uv_write的事實有關。由於它們都寫入相同的處理程序,因此如果在libuv循環內調用它們時出現故障,則會發生不良情況。不過,我不確定我的評估是否正確。
我懷疑循環工作的[刪除請求](https://github.com/ghostec/film/blob/master/server/server.cpp#L49)並不是一個好主意。 ;-) – skypjack
非常感謝!解決了你指出的錯誤之後,我仍然有同樣的問題。 新功能:https://github.com/ghostec/film/blob/master/server/server.cpp#L36 如果我不在這裏使用uv_queue_work https://github.com/ghostec/film/ blob/master/server/server.cpp#L55,只是用觀察者(消息)替換整個內部的隨機崩潰停止。 –
我建議你從答案中鏈接的項目中獲得靈感。我無法一遍又一遍地查看代碼來解決任何問題,我現在正在工作,對不起。 – skypjack