Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在测试中将多个套接字连接到sail_Node.js_Sockets_Socket.io_Sails.js - Fatal编程技术网

Node.js 如何在测试中将多个套接字连接到sail

Node.js 如何在测试中将多个套接字连接到sail,node.js,sockets,socket.io,sails.js,Node.js,Sockets,Socket.io,Sails.js,我在sails.js中设置了一个消息传递控制器,并希望使用多个客户端对其进行测试,以查看发布/订阅代码是否有效。我建立了一个测试文件 var socketIOClient = require('socket.io-client'); var sailsIOClient = require('sails.io.js'); var socket1 = socketIOClient; var client1 = sailsIOClient(socket1); var socket2 = socketI

我在sails.js中设置了一个消息传递控制器,并希望使用多个客户端对其进行测试,以查看发布/订阅代码是否有效。我建立了一个测试文件

var socketIOClient = require('socket.io-client');
var sailsIOClient = require('sails.io.js');
var socket1 = socketIOClient;
var client1 = sailsIOClient(socket1);
var socket2 = socketIOClient;
var client2 = sailsIOClient(socket2);
var socket3 = socketIOClient('http://localhost:1337', {'force new connection': true});
var client3 = sailsIOClient(socket2);
...
  • client1.socket.get…
    起作用并表示已订阅

  • client1.socket.post…
    工作并向数据库发布消息

因此,我想测试一个客户端是否可以在发布新消息时收到通知。但是,当我从client1或client2发布时,它会同时从这两个客户端发布。本质上,它们链接到同一个套接字对象或类似的对象,但我不知道在哪里。所以我想连接多个套接字,我尝试了socket3和client3等变体,但遇到以下问题:

  • client3.socket.get…
    client3.socket.post…
    以及其他变体(forceNew、multiplexing等)都挂断了,无法解决
挂断示例:

sails.log('posting...');
client3.socket.post('/v1.0/messaging', data, function(body, JWR){
  sails.log('posted');
  done();
});
只有
posting…
以这种方式记录,但是如果使用
client1
client2
则记录
posted


我的问题:
如何将多个客户端连接到我的sails api以测试我的发布/订阅控制器是否工作?

实际版本的socket.io的正确语法应该是

//first socket
var socket1 = socketIOClient('http://localhost:1337', {'forceNew: true});
//second socket
var socket2 = socketIOClient('http://localhost:1337', {'forceNew: true});

请参阅socket.io文档

我现在无法测试它,但您可以试试这个

var socketIOClient = require('socket.io-client');
var sailsIOClient = require('sails.io.js');

// Instantiate the socket client (`io`)
var io = sailsIOClient(socketIOClient);
// prevents socket to connect with it's default origin
io.sails.autoConnect = false


// Ask the client to create two socket connections
var socket1 = io.sails.connect('http://localhost:1337');
var socket2 = io.sails.connect('http://localhost:1337');

// Test it
socket1.get(url, data, cb)
socket1.post(url, data, cb)
socket2.get(url, data, cb)
socket2.post(url, data, cb)

// If you want to configure and use the "eager" instance
io.sails.url = 'http://localhost:1337'; 
io.socket.get(url, data, cb)
这样,您就不用使用


在浏览器中使用
sails.io.js
时,
io.socket
包含套接字实例(在注释中称为“渴望实例”),该实例将自动尝试使用提供js文件的主机进行连接
io.sails.connect()
允许您创建其他实例。

我尝试了此操作,但其结果与
'multiplex':false
'force new connection':true
相同-请参见我刚才添加的示例。有可能发生这种情况的原因吗?非常感谢!我非常感谢您对源代码的解释和链接,以说明其工作原理:)