测试一个 Socket.io 应用程序,其中有两个连接交互
Testing a Socket.io app, in which two connections interact
我对 NodeJS 的单元测试很陌生,现在我想使用 Mocha 测试一个 socket.io 服务器,该应用程序涉及 2 个套接字的交互,规范如下
var expect = require('expect.js');
var io = require('socket.io-client');
describe("Server", function() {
var options = {
transports: ['websocket'],
'force new connection': true
};
var socketOne;
var socketTwo;
it("Should do stuff", function(done) {
socketOne = io.connect("http://localhost:3000");
socketOne.on("connect", function(data) {
socketTwo = io.connect("http://localhost:3000");
socketTwo.on("connect", function(data) {
console.log("hellow world");
});
});
socketOne.on("connection", function(x) {
console.log(x);
done();
});
});
});
到目前为止,我只想测试创建两个套接字连接,但是当我 运行 它时,似乎只有 "socketOne" 连接到服务器, socketTwo.on ("connection") 没有被调用。你知道我做错了什么吗?
socket.io 客户端将回收(多路复用)任何现有连接,这就是为什么您的第二个连接没有触发连接事件。为防止这种情况,您可以通过在连接选项中指定 {multiplex: false}
来禁用多路复用。像这样:
socketOne = io.connect("http://localhost:3000");
socketOne.on("connect", function(data) {
socketTwo = io.connect("http://localhost:3000", {multiplex: false});
socketTwo.on("connect", function(data) {
console.log("hellow world");
});
});
我对 NodeJS 的单元测试很陌生,现在我想使用 Mocha 测试一个 socket.io 服务器,该应用程序涉及 2 个套接字的交互,规范如下
var expect = require('expect.js');
var io = require('socket.io-client');
describe("Server", function() {
var options = {
transports: ['websocket'],
'force new connection': true
};
var socketOne;
var socketTwo;
it("Should do stuff", function(done) {
socketOne = io.connect("http://localhost:3000");
socketOne.on("connect", function(data) {
socketTwo = io.connect("http://localhost:3000");
socketTwo.on("connect", function(data) {
console.log("hellow world");
});
});
socketOne.on("connection", function(x) {
console.log(x);
done();
});
});
});
到目前为止,我只想测试创建两个套接字连接,但是当我 运行 它时,似乎只有 "socketOne" 连接到服务器, socketTwo.on ("connection") 没有被调用。你知道我做错了什么吗?
socket.io 客户端将回收(多路复用)任何现有连接,这就是为什么您的第二个连接没有触发连接事件。为防止这种情况,您可以通过在连接选项中指定 {multiplex: false}
来禁用多路复用。像这样:
socketOne = io.connect("http://localhost:3000");
socketOne.on("connect", function(data) {
socketTwo = io.connect("http://localhost:3000", {multiplex: false});
socketTwo.on("connect", function(data) {
console.log("hellow world");
});
});