【问题标题】:Sails.js 0.10 sockets not connectingSails.js 0.10 套接字未连接
【发布时间】:2015-03-09 08:00:42
【问题描述】:

由于关于sails 套接字实现的文档过时,我正在努力获取基本的“连接”消息。这是我的 node.js 服务器端代码:

sails.sockets.on('connection', function(socket){
            sails.log.info('socket connected');

            //create room and broadcast a welcome message
            socket.emit('user joined', {'message': 'Welcome to ' + roomName});
            socket.join(roomName);
            socket.broadcast.to(roomName).emit('user joined', {'message': 'Welcome to ' + roomName});
        });

和我的客户端:

         var sock = io.connect('http://localhost:8888');
        sock.on('connection', function(socket){
            console.log('conected to server');
        });
        sock.on('user joined', function (json) {
            console.log('socket: ' + json);
        });

我确实在启动时收到了来自sails 本身的 OK 消息,但似乎无法获得我自己的连接:

sails.io.js:200 `io.socket` connected successfully. (for help, see: http://sailsjs.org/#!documentation/reference/BrowserSDK/BrowserSDK.html)

我尝试使用 socket.io v1 并遇到了同样奇怪的情况。有任何想法吗?谢谢!

【问题讨论】:

    标签: javascript node.js sockets sails.js


    【解决方案1】:

    在服务器上config/sockets.js

    module.exports.sockets = {
      onConnect: function(session, socket) {
        sails.log.verbose('>>>    socket user connected');
        sails.sockets.blast('eventName', dataToBlast);
      },
    };
    

    文档http://sailsjs.org/#/documentation/anatomy/myApp/config/sockets.js.html

    在客户端

    io.socket.on('eventName', function(dataToBlast) {
       // process dataToBlast
    });
    

    文档http://sailsjs.org/#/documentation/reference/websockets/sails.io.js/io.socket.on.html

    请注意,socket 需要订阅eventName。要订阅,您需要创建控制器 SubscribeController.js 并通过套接字请求它的操作。

    var SubscribeController = {
      sub: function(req, res) {
         ModelName.subscribe(
             req.socket, 
             [] /*records to subscribe to or empty array to subscribe to all */, 
             ['eventName'] /* array of strings eventNames */
         );
      },
    };
    

    对于调试客户端,您可以连接到firehose,这将为您的客户端提供来自sails 服务器的所有消息

    io.socket.get('/firehose');
    io.socket.on('firehose', function newMessageFromSails(message) {
                    typeof console !== 'undefined' &&
                        console.log('New message published from Sails ::\n', message);
                });
    

    【讨论】:

    • 感谢您澄清这一点。我意识到我对套接字有结构性的误解。我想我可以在客户端创建一个新的套接字连接。显然你只有一个套接字连接。 Sails.js 引用了一个名为 app.js 的文件,该文件显示了它如何连接到sails,然后将其放在窗口上,以便在应用程序的其余部分进行访问。
    猜你喜欢
    • 2014-06-04
    • 2017-07-09
    • 2017-01-04
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2017-03-18
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多