如何通过 socket.io 发送 POST 或通过 socket.io 调用 feathersjs 服务?

How can to send POST via socket.io or call a feathersjs service via socket.io?

我有一项服务(查找、获取、创建、删除),我想通过 socket.io

调用主题

例如:

一个用户在聊天中给另一个用户写了一条消息。我希望数据不是通过请求发送的,而是在套接字上实时发送的,因为此时创建的是猫鼬的文档。

可能吗?如果可以,我该怎么做?

下面是我的代码片段:(服务器端)

 io.on('connect', function(socket){

   socket.on('message', function(id, msg){
   socket.to(id).emit('chat message', msg);
   });

}))

http://localhost:3030/messages <-- URL of REST api 使用猫鼬创建文档。在 link 上发送数据后正在创建文件。我需要通过 socket.io 而不是请求来创建文档。

我的意思是这样的:

 io.on('connect', function(socket){

   socket.on('message', function(id, msg){
   socket.to(id).emit('chat message', msg);

   // Socket call a create method of my service
   socket.post('/messages', data);

   });

}))

好吧,是也不是。 Socket.io 中没有 HTTP/REST-style 个动词,但由于您可以发送任何想要的内容,因此您可以自己添加动词。

此外,如果您想以更结构化的方式构建实时 APIs,那么您可能想看看像 ActionHerp 这样的框架:

除了 HTTP 之外,它还可以使用 WebSocket 或 TCP 套接字作为底层传输,并且您可以创建自定义 "actions",您可以根据需要进行自定义。

现在,如果你想使用 Feathers 而不想使用其他任何东西,那么你可以看看 feathers-socketio:

它是一个 Feathers Socket.io 实时 API 提供程序,通过 Socket.io 实时 API 公开 Feathers 服务。它与 Feathers 1.x 和 2.x 兼容。您可以使用 Socket.io 与其进行交互。

如果您没有使用 Feathers as the client you can find the detailed documentation about how to call services via sockets here

可以通过这样的套接字直接创建 /messages 服务的消息:

var socket = io();

socket.emit('messages::create', {
  "text": "I really have to iron"
}, (error, message) => {
  console.log('Todo created', message);
});

您还可以像这样收听任何已创建的事件:

var socket = io();

socket.on('messages created', data => console.log('Someone created a new message', data);

socket.emit('messages::create', {
  "text": "I really have to iron"
}, (error, message) => {
  console.log('Todo created', message);
});