2012-06-28 30 views
0

我想編寫Java接口的數據分析插件。該接口可能在不同的計算機上運行。接口將發送命令,Python程序可以返回大量數據。該接口由Java Webstart系統分發。兩者都從MySQL服務器訪問主數據。爲Java接口編寫Python數據分析服務器

實施溝通有什麼不同的方式和優勢?當然,我在互聯網上做了一些研究。雖然有很多建議,我仍然不知道有什麼區別,以及如何決定。 (我不知道他們)

我發現了一個建議,使用套接字,這似乎很好。編寫一個專門爲每個連接分配一個Python分析過程的服務器很簡單(在針對特定客戶端的一次通信請求後可能會保留臨時數據)?

我想了解如何使用套接字並傳遞YAML字符串。 也許我的主要問題是:RabbitMQ,ZeroMQ,CORBA,SOAP,XMLRPC等系統的關係和優勢是什麼?

也有人建議使用管道或共享內存。但那不符合我的要求?

是否有任何方法有利於調試或其他大小?

我希望有人能幫助我理解技術並幫助我確定解決方案,因爲很難從技術描述中判斷。

(我不認爲像Jython中,JEPP,...解決方案)

回答

1

提供你所描述的業績的意見,這聽起來像你正在處理的,可能需要大量的潛在的大數據/查詢有時候需要獲取和序列化,在這種情況下,你肯定希望使用能夠處理併發連接而無需堆疊線程的東西。因此,在Python域名中,我不能推薦Twisted之外的任何網絡庫。

http://twistedmatrix.com/documents/current/core/examples/

無論你決定使用香草HTTP或自己的協議,扭曲是相當多的併發網絡的一站式服務。當然,這個名字很多,而且文檔是Atlantean,但是如果你花時間學習它,那麼在你的網絡領域中你很難做到。您可以擴展基礎協議和工廠,使一臺服務器可以在基於反應器的事件循環中處理數據,並在準備就緒時響應延遲請求。

序列化格式實際上取決於數據的性質。在輸出中會有任何二進制作爲響應嗎?複雜的類型?如果是的話,這就排除了JSON,儘管這正成爲最常見的序列化格式。 YAML有時似乎在python社區中享有特權的地位 - 我沒有廣泛使用它,因爲我使用連續數據所做的大多數工作都是使用javascript在前端呈現的數據。

消息隊列確實是工具箱中最重要的工具,當您需要推遲後臺任務而不掛起響應時。它們通常用於Web應用程序中,在完成任何複雜的處理之前,HTTP請求不應該掛起,因此UI可以儘早渲染並依靠隱含的「承諾」進行處理。它們有兩個重要特徵:它們依賴於最終的一致性,因爲在協議發送響應後該過程可以結束很長時間,而且如果任務失敗,它們也具有故障安全和重試指令。他們是你在「儘快完成這項艱鉅任務並且相信你完成任務」問題領域的地方。

如果我們不是在談論串行輸出中潛在的巨大響應機構,和相對簡單的數據類型,有什麼錯滾滾扭曲的一個簡單的HTTP服務器延遲。

+0

謝謝!這是一個非常好的解釋。你的意思是扭曲避免了一些我會用線程遇到的問題(我也不知道)?但是我仍然可以有單獨的服務器進程來保持一個連接客戶端的請求之間的通信狀態? HTTP有一些限制,對於簡單的命令YAML的原始傳輸很好?響應可能會有MB大小的數據。如果我爲每個客戶端連接創建一個線性進程,似乎我不需要隊列? – Gerenuk

+0

扭曲讓你定義自己的協議,這在本質上是握手,「誰 - 發送 - 什麼 - 時」,而連接合同都制定瞭如何定義。 HTTP本身就是定義響應和請求語法的其中之一。 Twisted的美妙之處在於反應器模式,它可以通過編程方式處理事件循環來消除對OS線程的需求。您可以在協議保持狀態,有一噸例如聊天服務器教程,做到這些,不像無狀態HTTP的。它確實是一個網絡庫,而不僅僅是一個簡單的http偵聽器。 – DeaconDesperado

相關問題