2015-06-26 87 views
2

我們正在開發C語言的DDP服務器(不要問爲什麼 - 我們只需要)。我們注意到Meteor使用SockJS來實現其DDP協議。雖然有些庫允許我在C中使用網絡套接字,但我還沒有找到C的任何SockJS庫。C中的DDP服務器

SockJS庫似乎相當廣泛,並且由於沒有關於它如何操作的規範,這聽起來像是一種非常脆弱的方法來嘗試對其技巧進行逆向工程。

它讓我想知道最好的策略是讓我們支持DDP。還有我能想到的幾個選項:

  1. 我可以導入V8發動機,並使用它的C++和JavaScript實現之間的橋樑(然後我可能暴露到C相對容易)
  2. 我可以用SockJS庫X用於語言Y,並使用Python/C/JNI/...與該接口連接
  3. 也許我可以強制Meteor只使用web套接字(DDP文檔似乎暗示這是可能的,但我無法確定如何)。

如果可能,選項3將是最少的努力,但會繼承WebSockets(瀏覽器互操作性,公司防火牆等)的問題。

選項1和2是可行的,但我必須包括的庫的大小感覺與我將使用的功能不成比例。

考慮到上述情況,似乎沒有一個完美的解決方案。不過,我想驗證上述選項的可行性,並知道我是否錯過了一些東西。另外,如果有人嘗試過,我很樂意聽到它。

+0

DDP的[分佈式數據協議](https://en.wikipedia.org/wiki/Distributed_Data_Protocol),DDP的[數據報傳送協議](https://en.wikipedia.org/wiki/Datagram_Delivery_Protocol),還是其他一些DDP? – duskwuff

+0

如何開始? http://stackoverflow.com/questions/27224164/etablish-ddp-connection-between-meteor-server-and-c-app –

+0

JD_GRINDER - 我已經注意到這個問題,但請注意它涉及到DDP客戶端,而不是服務器。但是,從客戶的角度來看,Meteor的DDP實現確實只支持Web套接字。我想知道的是,Meteor客戶端JS庫是否可以與只能提供Web套接字的服務器一起使用。 –

回答

0

我們最終決定使用Mongoose HTTP服務器(http://www.github.com/cesanta/mongoose)在C中實現SockJS協議的一個子集(http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html)。

SockJS與服務器協商驗證網絡套接字是否可用的部分很容易實現。此外,SockJS協議將Web套接字包封裝在它自己的頭文件中,並使用常規心跳進行活動檢查。

談判是通過迴應sockjs/info請求完成的。下面的響應確保SockJS使用web套接字協議:

{"websocket":true,"origins":["*x:*"],"cookie_needed":false,"entropy":4271558656}

下面的屏幕截圖顯示了我們的SockJsServer & DDPServer到目前爲止實施的網絡插座交通:

SockJS & DDP messages

3

我實現了一個C++中的開源DDP服務器庫,用於處理協議詳細信息。它應該與一些現有的websocket庫一起使用,例如貓鼬,websocketpp,libwebsockets等。

例如,調用C++方法從MeteorJs網站看起來是這樣的:

enter image description here

充分利用C++的實時數據也支持。

更多信息和例子 - 在GitHub: