В настоящее время я работаю над докеризацией протестированного приложения socket.io для простого приложения чата, используя socket.io и mocha для тестирования. сервер открывает сокет для прослушивания через порт 3000, а тестовый клиент использует сокет для отправки сообщений или получения сообщений.
Я использую файлы компоновки Docker версии 3.
Dockerfile узла сервера:
FROM node:10
WORKDIR /usr/src/appserver
COPY package*.json ./
COPY public public
COPY main.js main.js
RUN npm install
RUN npm install express
RUN npm install socket.io
CMD ["npm", "start"]
тестовый докер-файл:
FROM nodeserver
COPY test test
RUN npm update && \
npm install -g mocha && \
npm install -g socket.io-client
CMD ["npm", "test"]
докер-Compose:
version: "3"
services:
nodeserver:
build: .
expose:
- "3000"
image: ws
test:
depends_on:
- nodeserver
links:
- nodeserver
build: ./test
image: test_image
мой сервер узлов прослушивает порт 3000 и при подключении отправляет всем привет сообщение.
let express = require('express');
let app = express();
let http = require('http').createServer(app);
let io = require('socket.io')(http);
http.listen(3000, function ()
{
console.log('listening on *:3000');
});
io.on('connection', function(socket)
{
console.log('a user connected');
io.emit('hi', 'hi');
});
и мой тест мокко выглядит следующим образом, который по сути присоединяется как клиент и ожидает прихода сообщения hi.
const url = 'ws://nodeserver:3000';
describe("Chat Server", function()
{
it("Should broadcast hi!", function(done)
{
let client1 = io.connect(url, options);
client1.on('connect', function()
{
client1.on('hi', function(msg)
{
msg.should.equal("hi");
client1.disconnect();
done();
});
});
});
}
работает docker-compose, запускает сервер узлов, и тестовый клиент завершается неудачно с истечением времени ожидания, что говорит мне, что клиент не может видеть сеть роя.
теперь запускает докеры отдельно, то есть предоставляет серверы узлов хосту и пытается подключиться к моему локальному хосту, вместо этого работает отлично, и тест проходит. Это говорит мне о том, что мой сокет и способ, которым я общаюсь с nodeserver, должны быть правильными, что в основном означает, что у меня должны быть проблемы с настройкой сети моего роя. Может кто-нибудь сказать мне, что я делаю здесь не так?