从客户端创建Socket IO通道

时间:2013-01-27 09:33:09

标签: node.js websocket socket.io

我是Nodejs和Socketio的新手。我想做类似以下的事情。

- >创建一个侦听Web浏览器指定的通道的socket.io/node.js服务器。 - >服务器端脚本将messeges推送到特定通道。

(我已经创建了一个服务器,这里是代码。这只是向所有连接的客户端发送两个messeges.action和messege)

//start code    
var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , url = require('url')

app.listen(8080);

function handler (req, res) {
    // parse URL
    var requestURL = url.parse(req.url, true);

    // if there is a message, send it
    if(requestURL.query.message)
            sendMessage(decodeURI(requestURL.query.action), decodeURI(requestURL.query.message));

    // end the response
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end("");
}

function sendMessage(action, message) {
    io.sockets.emit('notification', {'action': action, 'message' : message});
}

所以基本上Socket.io服务器里面没有定义任何通道。但它们是由客户端定义的(浏览器中的js),并且通过服务器端脚本(如使用cURL的php)将messeges发送到特定通道。

很抱歉,如果之前已经提出这个问题,我会搜索并找不到任何有用的信息。

1 个答案:

答案 0 :(得分:1)

我对你的问题感到有点困惑。通过渠道,你的意思是socket.io房间? https://github.com/LearnBoost/socket.io/wiki/Rooms
房间是客户群,可以使用以下命令向房间内的所有客户发送消息:

io.sockets.in('room').emit('event_name', data)

重要的是要意识到房间是服务器端的东西。因此,如果您想从客户端向房间发送消息,您必须向服务器发送消息(或请求)并传递房间名称。

此外,您的处理程序函数作为HTTP端点公开是有点不寻常的。如果您的客户端已经有socket.io连接,那么将它作为socket.io消息更容易发送。

如果这不能回答您的问题,您是否也可以发布您的客户端代码?也许这有助于理解我想要实现的目标。