2016-10-12 67 views
0

我在服務器端使用socket.io和nodejs來提供我的Web應用程序和服務器之間的雙向通信。使用Web套接字時的請求/響應「語言」設計

我正在使用socket.io API發出命令並接收響應,但我不確定是否有更有條理的方法來定義將語法發送到服務器並從服務器接收結果的「語言」。

發送命令到服務器,我發射從Web應用程序的事件,如下面的(下面我使用僞代碼):

socket.emit('commandRequest', { 
       msg_id: '...' 
       username: '...', 
       command: '...'      
}); 

服務器評估該命令併發出像如下響應:·

socket.on('commandRequest', (data) => { 
    // parse and execute data.command 

    socket.emit('commandResponse', { 
     msg_id: data.msg_id, 
     username: data.username, 
     response: ..., 
     error: ... 
    }); 
}) 

最後,Web應用程序監聽來自服務器的響應,並相應地更新應用內容:

socket.on('commandResponse', (data) => { 
    if (data.error) { 
     ... 
    } else { 
     // interpret data.response 
    } 
}) 

因此,我使用commandRequest/commandResponse事件命名範例,事件數據結構具有相應的{command: ...}{response: ...}屬性。

是否有更正式的方式來定義可用於更復雜的客戶端/服務器交互的請求/響應「語言」?類似於REST API通過HTTP請求實現的功能,但使用Web套接字?

回答

0

你可以嘗試尋找到Primus及其Responder插件作爲在這個博客帖子描述:

從帖子摘錄:

它允許請求的對方對等體使用響應來自其他庫的簡單API。

博智響應增加了兩件事博智核心功能:

  1. 是儘快的對請求的響應發出的呼籲request新的事件。
  2. 名爲writeAndWait(data, fn)的新方法將數據寫入對等方,並在對等方發送其響應時運行給定的回調函數。

Primus Responder也在客戶端上提供。