2013-06-04 187 views
0

我嘗試通過websocket在boost下製作服務器「消息」。 目前,我經常可以從服務器發送大量消息或一系列消息。 當我點擊「發送」時,它發送大量數據。 困難在於,當服務器在諸如「停止」,「暫停」等websocket消息中收到命令時...此命令將一直運行,直到前一封郵件結束。我試圖停止執行上一個命令。Websocket和接收消息

我試圖讀取發送數據之間的緩衝區。但它不起作用。我嘗試檢查是否有一個接收訂單與async_read_some。基於 http://www.codeproject.com/Articles/443660/Building-a-basic-HTML5-client-server-application 和HTTP服務器上去 http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/examples.html

的例子

我你有什麼想法?我返工我的代碼幾次,但因爲它出現在最後,我不能執行新的實時控制..

謝謝

+0

我找到一個解決方案,在每次分析新緩衝區時啓動的線程中創建一個函數。 – user2451636

回答

0

如果數據已經被髮送到網絡適配器,有很你可以做些什麼來改變數據包的順序。網絡適​​配器會按照您排隊的順序發送數據包。

如果您希望能夠發送「更高優先級」的消息,那麼不要一次性發送所有數據,而是將其保留在隊列中等待設備接受更多數據,並且如果高優先級消息進來,在發送任何其他數據包之前發送它。

不要使數據包太小,但我想如果你一次創建幾千字節的數據包,它將會很快地工作,並且仍然可以很好地控制數據流。當然,這也需要接收者理解「可能有不同的'流'或'流'信息,並且如果你發送'暫停'命令,這意味着先前發送的流在發送「簡歷」之前不會收到任何內容,「顯然根據需要調整這一點,以滿足您所需的行爲,但是您確實需要某種方式來不只是說」將'停止'作爲數據放入流程的其餘部分「,而是將其解釋爲命令。

+0

謝謝。我的方法與您提供的類似。 目前,我通過這些消息將我的數據分成幾個部分。我試圖在每次發送消息之間沒有成功,以測試是否有像「停止」這樣的消息來啓動完成發送其餘數據的功能。 我嘗試執行捕獲緩衝區並閱讀以查看是否存在同時收到一條新消息。 它不起作用。但是,接收到下面的命令,但是到達 另一方面,我得到包含命令的消息,另一方面,我運行這些命令並通過消息發送答案。 – user2451636

0

如果在服務器收到所有數據時服務器接收到停止消息,在網絡中將大消息作爲單個數據包發送,則在完成接收數據之前,您可能無法控制它。

最好是實現優先級消息隊列。將消息作爲客戶端和彙編服務器的小塊發送,而不是單個大包。給消息包如停止(取消)高優先級。在服務器端收到消息時,如果有任何高優先級消息存在,如stop(取消),則不需要接受剩餘的消息,可以關閉服務器上的websocket連接。

閱讀線程Chunking WebSocket Transmission欲瞭解更多信息。

+0

您好, 謝謝。 我的代碼考慮了消息和優先級的大小,但問題是我無法在兩個程序之間捕獲新消息。每個收據都會檢查收到的消息,並確定消息中的命令(和函數),但是在「發送」期間,而不是它是否接收到新消息。 – user2451636

0

當你使用Boost時,你看過WebSocket++(基於Boost/ASIO)嗎?

+0

你好, 我想隨後使用websocket ++,但它會花費我更多的時間,我不知道它對我有幫助。我後來用線程找到了解決方案。 謝謝 – user2451636