首页 > 解决方案 > 如何使用 NodeJS websocket 在 websocket 服务器上创建多个通道?

问题描述

我正在使用此代码来处理 websocket 服务器上的用户请求:

var WebSocketServer = require('websocket').server;
var http = require('http');
var server = http.createServer(function(request, response) {
    console.log((new Date()) + ' Received request for ' + request.url);
    response.writeHead(405);
    response.end();
});
server.listen(3333, function() {
    console.log((new Date()) + ' Server is listening on port 3333');
});
wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
});
function originIsAllowed(origin) {
    // put logic here to detect whether the specified origin is allowed.
    return true;
}

wsServer.on('request', function(request) {
    if (!originIsAllowed(request.origin)) {
        // Make sure we only accept requests from an allowed origin
        request.reject();
        console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
        return;
    }

    var connect = request.accept('register', request.origin)
    connect.on('message', function(messageText) {
        // do business logic here if message coming into the register channel
    })

    connect.on('close', function(reasonCode, description) {
        console.log((new Date()) + ' Peer ' + connect.remoteAddress + ' disconnected.');
    });
})

现在如何创建另一个通道来处理其他类型的消息?

我试过这个,但收到WebSocketRequest may only be accepted or rejected one time.错误消息:

    var connect = request.accept('register', request.origin)
    connect.on('message', function(messageText) {
        // business logic here if message coming into the register channel
    })

    var getPhotos = request.accept('get_photos', request.origin)
    getPhotos.on('message', function(messageText) {
        // business logic here if message coming into the get_photos channel
    })

如何处理多个渠道?这个websocketnpm 包可以吗?

标签: node.jswebsocketchannels

解决方案


推荐阅读