当前,我正在探索Web开发,以了解所有宣传内容。除了遵循一个小的“在Node.JS中创建您的第一个CRUD应用程序”和一些JavaScript的正规培训之外,我没有任何经验。
我是JavaScript,NodeJS,Sails.JS和WebSockets的新手。
我当前的问题是:
我正在尝试开发的应用程序接收带有JSON对象的POST调用。这是应用程序的输入部分。这些POST调用来自任何随机主机。
输出是一个网页,该网页通过侦听名为Sails.io.js的基于Sails.JS的WebSocket系统进行更新。
基本上,来自任何主机的每个POST都会在WebSocket上导致事件。
由于我没有构建正式的REST API,因此我必须在Sails.JS中定义一些部分。我确实启用了蓝图。
首先,在处理POST调用的控制器中,我可以调用以下代码,以便现有的WebSockets可以接收到正在创建新ServiceHeartBeatSession的事件。这里提到的所有服务器端代码都位于控制器中或在控制台中执行。
sails.sockets.addRoomMembersToRooms(ServiceHeartBeatSession._classRoom()
, ServiceHeartBeatSession._room(session.id) );
然后,执行invoke方法以将此事件发送到所有侦听的WebSockets。
ServiceHeartBeatSession.publish([ session.id ], { "verb": "created" });
但是,.publish方法不会导致现有WebSocket发生事件。除非我自己在控制台中执行它。 WebSocket的注册方式如下:
io.socket.on('serviceheartbeatsession', function(resData) {
alert('Something changed!!!!');
});
我做了一些源代码的挖掘,并尝试自己调试一下。到目前为止,这是我发现的东西:
我尝试了以下替代方法,但是在控制器中不起作用。但是,它确实可以在Node控制台中工作。
sails.sockets.broadcast([ ServiceHeartBeatSession._room(session.id) ], "serviceheartbeatsession", 'hi!');
以下内容按预期工作,但我不想使用它。
sails.io.sockets.emit('serviceheartbeatsession', { verb: 'created' });
以上尝试都没有选择房间,因此我进行了更深入的研究。下面的调用是.publish方法的结果。但是,只有在控制台中重复此操作后,它才能起作用。
var emitter = sails.io.sockets;
emitter.in('sails_model_serviceheartbeatsession_5b6b26748377829d34983d67:serviceheartbeatsession'); // for example
emitter.emit('serviceheartbeatsession', { verb: "created" });
有人有什么想法吗?
答案 0 :(得分:0)
sails.sockets.addRoomMembersToRooms(ServiceHeartBeatSession._classRoom()
, ServiceHeartBeatSession._room(session.id), () => {
ServiceHeartBeatSession.publish([ session.id ], { "verb": "created" });
});
文档说有一个回调。错过了,呵呵。