<div>Dear Andy</div><div>Thanks for the reply.</div><div>But when I am testing, call<span style="line-height: 1.5;"><span style="background-color: rgb(255, 255, 255);"> libwebsocket_callback_on_writable() from another thread, the call almost has no effect, only little chance to be effective. It seems I must call</span></span><span style="line-height: 1.5;"><span style="background-color: rgb(255, 255, 255);"> libwebsocket_callback_on_writable() from libwebsockets thread itself, which is always effective.</span></span></div><div><span style="line-height: 1.5;"><span style="background-color: rgb(255, 255, 255);"><br></span></span></div><div><span style="line-height: 1.5;"><span style="background-color: rgb(255, 255, 255);">Do you know the reasons?</span></span></div><div><span style="line-height: 1.5;"><span style="background-color: rgb(255, 255, 255);"><br></span></span></div><div><div><br></div><div><span style="background-color: rgb(204, 255, 204);">>> 3. To write data to ws client, is it safe to let another thread to<br>>call libwebsocket_callback_on_writable() to the same context created by<br>>the dedicated ws thread? Will there be any problem?</span><br><br><span style="background-color: rgb(153, 204, 255);">That - alone - should be safe from other thread contexts.  But you must also watch for the logical wsi lifecycle ending asynchronously (the service thread closes and deletes the wsi, and then your other thread tries to use it) and cancel any use of the dead wsi from another thread.  You can know the wsi is going to get deleted by handling the CLOSE callback.</span><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ 原始邮件 ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>发件人:</b> "Andy Green";<andy@warmcat.com>;</div><div><b>发送时间:</b> 2015年4月10日(星期五) 上午7:07</div><div><b>收件人:</b> "Jeffrey Zhao"<9538358@qq.com>; "libwebsockets@ml.libwebsockets."<libwebsockets@ml.libwebsockets.org>; <wbr></div><div></div><div><b>主题:</b> Re: libwebsocket thread safe?</div></div><div><br></div><br><br>On 9 April 2015 23:58:36 GMT+08:00, Jeffrey Zhao <9538358@qq.com> wrote:<br>>> Dear sir<br>>> If I use one dedicated ws thread to create libwebsocket  context and<br>>run libwebsocket_service() loop with maximum timeout value.<br>>> In this case,<br>>> 1. Will there be new thread(s) created within libwebsocket itself?<br><br>No.  It is completely singlethreaded.<br><br>>> 2. Is all callback functions(maybe triggered by different wsi) are<br>>processed in sequence, not in parrarell?<br><br>Yeah.  It is singlethreaded.<br><br>If you need it to scale for server case, you may run multiple threads or processes, one per cpu core.  This scales very very well.<br><br>>> 3. To write data to ws client, is it safe to let another thread to<br>>call libwebsocket_callback_on_writable() to the same context created by<br>>the dedicated ws thread? Will there be any problem?<br><br>That - alone - should be safe from other thread contexts.  But you must also watch for the logical wsi lifecycle ending asynchronously (the service thread closes and deletes the wsi, and then your other thread tries to use it) and cancel any use of the dead wsi from another thread.  You can know the wsi is going to get deleted by handling the CLOSE callback.<br><br>-Andy<br><br>>> thank you very much!<br><br></div>