在节点中POST到控制器操作并触发与客户端的websocket连接

时间:2013-06-21 17:19:54

标签: node.js websocket faye socket.io

节点和websockets的新手,我正在尝试创建与典型游戏或聊天应用程序不同的东西。

我需要能够将一些变量发布到一个动作,执行一些查找,然后使用找到的变量连接到客户端。我真的不知道这是否可能。

我遇到的主要问题是我没有典型的js客户端,没有浏览器,nada。我唯一的客户是python websocket客户端。我有这些连接到服务器OK ...好吧,他们可以ping服务器 - 我正在尝试使用Socket.io,Faye和Worlize。我更喜欢使用socket.io。

例如,如果我发布此内容:

 curl -X POST 'http://localhost:8080/timeout?id=1238763876&time=27365716576&bla=stuff' 

在我的app.js中我有类似的东西(有些位丢失,我的socket.io示例):

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/public/index.html');
});

app.post('/timeout', function (req, res) {

  //Find socket, not implemented yet

  console.log('I received a private message by ', from, ' saying ', msg);

  io.sockets.on('connection', function (socket) {
    io.sockets.emit('this', { will: 'be received by everyone'});        
  });

});

server.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

路由有效,但是当我发布时,我没有得到任何错误,也没有错误 - 就像我说的,我是来自Rails的Node的新手。我希望这是直截了当的。

有可能做这样的事吗?这是解决问题的方法还是我应该尝试别的东西。

1 个答案:

答案 0 :(得分:2)

用以下方法计算出来:

app.post('/commands/:action/:to', function (req, res) {
 target_socket = connections[req.params.to] 
 if (target_socket) {
   console.log(req.query)
   io.sockets.socket(target_socket.id).emit('name', 'stuff);
   res.send(200);
 }
 else
  res.send(404);
});

Inspiration taken this site..