從事多年的C++服務端開發作業,客戶端一直習慣了用MFC做一個plain UI。在當前web當道的社會里,CS顯然是上個世紀的東西了。想改成BS結構的,可總是有些想不明白如何弄。目前身邊幾個弄JAVA的哥們只會弄jsp,只會圍繞資料庫擺弄一些東西。考慮到通信的問題,c++和java可以采用通信協議Google Protocol Buffer。但若寫一個具有和c++通信的java application,該java application又如何集成到web里面,供用戶通過web控制呢?問題不曉得說清楚了沒有,求教大家!
uj5u.com熱心網友回復:
我在一個c++的服務器里面增加了對Google Protocol Buffer的支持。用c++的功呼叫java和netty庫寫一個APP也是不再話下,問題是如何讓這個java application 加上web頁面,給該C++的服務器發送訊息呢。uj5u.com熱心網友回復:
看不明白你具體要實作什么,只能猜測著說兩句java在WEB服務器開發方面功能很強,尤其是其內部集成的web功能模塊十分完善和強大
業界公認,C++可以找不到幫助,JAVA則一定能,就我使用BCB的經驗看,C++找不到解決代碼的情況很普遍,而JAVA是不是都能找到雖然不一定,但比C++容易找到估計是有可能的
至于通訊,其實關系到兩方面,一種是介面的使用,二是資料結構,這兩種
都正確實作了就可以正確通訊了
uj5u.com熱心網友回復:
主要是實作 將CS結構的軟體改成BS的。服務端程式是用C++完成。客戶端也是通過C++,通過socket實作鏈接。我想若是改成BS之后,一種方法是在程式里面撰寫一個輕量級的http server執行緒。這種將業務程式和http server 緊耦合的方法,很難擴充,并且自己寫的http server壓力測驗根本無法保證。因此考慮將c++服務程式和http server剝離,用c++和java程式通信,然后利用java web的強大功能實作對c++通信的二次封裝。并且從將業務邏輯和通信邏輯分離。無論多少人登陸 該web,壓力都該在該http server上,目前市場上流行的譬如nginx等抗壓測驗都很強大。和c++服務程式無關。understand?uj5u.com熱心網友回復:
大哥,你的這種結構中間經過兩次轉換結果才到了客戶端,效率可想而知,況且中間的兩個程式之間的通信也要分別開發,這樣開發和修改的效率很低下,不建議這么做uj5u.com熱心網友回復:
不過,你可以將c++代碼封裝成dll或使用ole之類的介面uj5u.com熱心網友回復:
非常感謝您的答復: 您的意思是說 把服務器的 操作部分的api封裝成一個dll,供java web呼叫么?uj5u.com熱心網友回復:
不過道理還是一樣的,該dll還是要負責和后臺的C++伺服器程式進行通信。同時該方案還會導致 dll和伺服器程式之間的緊耦合,沒有采用Google Protocol Buffer這種和平臺無關的通信方案好。uj5u.com熱心網友回復:
你使用JAVA制作服務器端,那么還要那個C++的服務器干什么?把那個C++的服務器廢掉,把C++實作的演算法部分等封裝成DLL給JAVA的服務器呼叫不是可以減少兩者之間的通訊么?如果一定要保留的C++服務器的話,那么JAVA服務器相當于一個轉發服務器,你只要實作你C++客戶端的通訊能力就可以了,這些通訊協議只要介面和資料結構正確和用什么工具開發并無關系
如果想通過增加一個java服務器減輕C++服務器的負擔,必須把JAVA服務器做成一個快取池,否則的話并不能減c++服務器的負擔
uj5u.com熱心網友回復:
非常感謝,終于有些明白了。把c++的exe檔案改成dll封裝,然后采用類似jnative的庫來啟用服務,呼叫該服務程式的相關函式介面。uj5u.com熱心網友回復:
這種思路 還從來沒弄過,有些作業量,該服務器程式呼叫了大量的其他第三方庫,能否行的通 還需要實驗以下。不過 這樣跟蹤除錯起來 是不是 更加困難了。uj5u.com熱心網友回復:
特別還是在linux環境下,采用gdb進行除錯轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101607.html
標籤:網絡及通訊開發
上一篇:C工程編譯求助
