在 sails v0.11 中发送消息(客户端)

Emitting a message in sails v0.11 (client-side)

我在使用最新版本的 sails.js (0.11.0) 时遇到一些问题。它在 github 中声明将接受纯 socket.io 代码,在 sails.js 中声明 运行;然而,我只是想在客户点击类似这样的东西时发出一条消息:

$('#myBtn').on('click', function(){
     io.socket.emit('message', {  
         message: {
             subject: subject
         },
         sender: id
     });  

});

我最终在 io.socket.emit() 的行上得到一个 "Uncaught TypeError: undefined is not a function" 又名 emit 不是 io.socket 的函数。

以下是我看过的一些参考资料:

我对 sails 的更新版本有一种感觉,我应该按照以下方式做一些事情,而不是发出消息:

io.socket.post('/user/message', data, function(data, jwres) {

});

这里的以下答案让我有些担心:

它指出 "class rooms" 与 publishCreatepublishDestroyintroduceobituary 一起被弃用。

那么我是遵循 Pub/Sub 范式,重写我的更多 "socket-io-ish" 代码以利用 sails 蓝图和 Pub/Sub,还是继续我的 socket-io 方式?

是否有另一种使用 sails 从客户端发出消息的方法?

您是正确的,通过套接字与服务器通信的推荐方式是使用 RESTful socket client methods。好处是您可以使用常规的 Sails 路由和 controller/action 架构进行套接字通信,而不必在后端支持整个其他层的订阅和事件处理。这是@mikermcneil 最初创建 Sails 的主要原因之一。需要注意两点:

  1. 您可以在控制器操作中使用 req.isSocket 来确定请求是否来自套接字,并且
  2. 您可以使用 io.socket._raw 在客户端上获取原始的基础 socket.io 实例,该实例将具有 emit 方法。但同样,这不是推荐的做法。