2016-10-12 31 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也在客户端上提供。