我在服务器端使用带有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套接字?
答案 0 :(得分:0)
您可以尝试查看Primus及其Responder插件,如本博文中所述:Request-Response Oriented Websockets
帖子的摘录:
它允许使用其他库中已知的简单API向对方请求响应。
Primus Responder为Primus的核心功能添加了两件事:
- 一旦对等方请求响应,就会发出一个名为
request
的新事件。- 名为
醇>writeAndWait(data, fn)
的新方法将数据写入对等方,并在对等方发送响应时运行给定的回调函数。Primus Responder也可以在客户端上使用。