2009-06-21 54 views
3

我需要爲快速命令/響應交互設置一個協議。我的直覺告訴我,只需將一個簡單的協議與CRLF分隔開的ascii字符串(如SMTP或POP3的工作方式)一起敲入,然後通過SSH/SSL將其隧道傳輸(如果需要保護它)。雖然我可以做到這一點,但我更願意在現有技術的基礎上進行構建,以便人們可以使用友好的庫而不是OS提供的套接字庫接口。我應該使用什麼協議進行快速命令/響應交互?

我需要......

  • 命令並通過結構化的數據來回的響應。 (XML,S表達式,不關心。)
  • 服務器在未被輪詢的情況下向客戶端發出計劃外通知的能力。

有什麼想法嗎?

+0

感謝您的答案。我希望搜索這個問題的人喜歡提供的答案列表。 – billpg 2009-06-21 20:22:52

回答

1

AMQP聽起來很有希望。另外,我認爲XMPP支持你想要的很多東西,儘管有相當多的開銷。

也就是說,根據你想要完成的工作,一個簡單的ad hoc協議可能會更容易。

+0

我接受這個答案,因爲我正在尋求「臨時協議」,因爲各種建議並不適合我的應用程序。 – billpg 2009-06-21 20:21:20

1

像SNMP這樣的東西呢?我不確定它是否與您的應用使用的模型完全匹配,但它支持異步通知和拉(即TRAP和GET)。

2

如果你只是想要求/回覆,HTTP非常簡單。它已經是一個請求/響應協議。客戶端和服務器端廣泛用於大多數語言。擴展它是很好理解的。

使用它的最簡單方法是將命令作爲POST請求發送到服務器,並讓服務器在響應正文中發送回覆。您也可以使用自己的動詞擴展HTTP,但這會使得更多的工作能夠利用緩存代理和其他理解HTTP的基礎設施。

如果您需要異步通知,請查看發佈/訂閱協議(Spread,XMPP,AMQP,JMS實現或TibcoRV,Tibco EMS或Websphere MQ等商業發佈/訂閱消息代理)。要選擇的協議或實施取決於您正在構建的系統的可靠性,延遲和吞吐量需求。例如,網絡擁塞時可以放棄通知嗎?當客戶端離線時通知會發生什麼 - 當客戶端重新連接時它們會被丟棄或排隊等待。

0

這是一個很大的問題,需要考慮大量的變量,這個問題只提到了一些問題:數據包格式,異步消息和同步消息以及安全性。有許多人可以考慮。我建議通過對7層協議棧(OSI/ISO)的描述並詢問自己在這些層需要什麼,以及是否要構建該層或從其他位置獲取它。 (您似乎主要對第6層和第7層感興趣,但也提到了較低層的位)。

還想一想這是安全關鍵應用程序還是具有正式V的系統的一部分V.非常好,值得信賴的通信系統不易設計;還有一個「動力不足」的協議可能會給應用程序帶來很多編碼負擔以進行錯誤恢復。

最後,我會建議看看其他類似於您的應用程序如何完成這項工作(請查看開放源代碼,閱讀書籍等)。美國也是有用的。專利局數據庫等;通過閱讀他們試圖解決的溝通問題的描​​述,人們可以得到很棒的想法。

相關問題