请求/响应"语言"使用Web套接字时的设计

时间:2016-10-12 16:05:08

标签: node.js websocket socket.io

我在服务器端使用带有nodejs的socket.io来提供我的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套接字?

1 个答案:

答案 0 :(得分:0)

您可以尝试查看Primus及其Responder插件,如本博文中所述:Request-Response Oriented Websockets

帖子的摘录:

  

它允许使用其他库中已知的简单API向对方请求响应。

     

Primus Responder为Primus的核心功能添加了两件事:

     
      
  1. 一旦对等方请求响应,就会发出一个名为request的新事件。
  2.   
  3. 名为writeAndWait(data, fn)的新方法将数据写入对等方,并在对等方发送响应时运行给定的回调函数。
  4.         

    Primus Responder也可以在客户端上使用。