如何在测试中将多个插座连接到帆

问题描述 投票:3回答:2

我在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,多路复用等)均挂断并且无法解析。

挂断示例:

sails.log('posting...');
client3.socket.post('/v1.0/messaging', data, function(body, JWR){
  sails.log('posted');
  done();
});

仅以这种方式记录posting...,但如果使用postedclient1,则记录client2


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

node.js sockets socket.io sails.js
2个回答
4
投票

我现在无法测试,但是您可以尝试此操作

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)

这样,您将使用create several SailsSocket instance而不是使用"eager" instance

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


1
投票

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

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

请参阅socket.io文档http://socket.io/blog/socket-io-1-2-0/#

© www.soinside.com 2019 - 2024. All rights reserved.