Сервер Websocket не подключается после развертывания на heroku:
Я уже просмотрел документацию и учебник по heroku.
Я могу запустить приложение локально, но у меня возникают проблемы при развертывании heroku.,Пользовательский интерфейс работает, но, похоже, не подключается к серверной части.Procfile
как было обновлено.
URL-адрес подключения клиента должен быть изменен на localhost: 8989 для локальной работы.Когда я жестко запрограммировал URL в клиенте перед развертыванием, ошибка в консоли такая же, как и в том случае, если я не запускаю сервер websocket, работающий с npm start локально.
https://github.com/kbventures/chatTest Внешний интерфейс:
import * as types from '../constants/ActionTypes';
import { addUser, messageReceived, populateUsersList } from '../actions';
const setupSocket = (dispatch, username) => {
const socket = new WebSocket('wss://boiling-brook-76849.herokuapp.com');
//const HOST = location.origin.replace(/^http/, 'ws');
//const socket = new WebSocket(HOST);
socket.onopen = () => {
socket.send(
JSON.stringify({
type: types.ADD_USER,
name: username
})
);
};
socket.onmessage = event => {
const data = JSON.parse(event.data);
switch (data.type) {
case types.ADD_MESSAGE:
dispatch(messageReceived(data.message, data.author));
break;
case types.ADD_USER:
dispatch(addUser(data.name));
break;
case types.USERS_LIST:
dispatch(populateUsersList(data.users));
break;
default:
break;
}
};
return socket;
};
export default setupSocket;
Back end:
const WebSocket = require('ws');
const port = process.env.PORT || 8989;
const wss = new WebSocket.Server({ port });
const users = [];
const broadcast = (data, ws) => {
wss.clients.forEach(client => {
if (client.readyState === WebSocket.OPEN && client !== ws) {
client.send(JSON.stringify(data));
}
});
};
wss.on('connection', ws => {
let index;
ws.on('message', message => {
const data = JSON.parse(message);
switch (data.type) {
case 'ADD_USER': {
index = users.length;
users.push({ name: data.name, id: index + 1 });
ws.send(
JSON.stringify({
type: 'USERS_LIST',
users
})
);
broadcast(
{
type: 'USERS_LIST',
users
},
ws
);
break;
}
case 'ADD_MESSAGE':
broadcast(
{
type: 'ADD_MESSAGE',
message: data.message,
author: data.author
},
ws
);
break;
default:
break;
}
});
ws.on('close', () => {
users.splice(index, 1);
broadcast(
{
type: 'USERS_LIST',
users
},
ws
);
});
});
Локально список пользователей будет заполняться, обновляться, и в консоли браузера не будет ошибок.
Чтобы воспроизвести ошибку, перейдите по адресу:
https://boiling -brook-76849.herokuapp.com /
Введите сообщение и проверьтеконсоль для следующей ошибки:
index.js: 2178 uncaught at handleNewMessage в handleNewMessage в takeEvery at
Ошибка: не удалось выполнить 'send' в 'WebSocket': все еще в состоянии CONNECTING
...
index.js: 5 Сбой подключения WebSocket к 'wss: //boiling-brook-76849.herokuapp.com/': Ошибка при рукопожатии WebSocket: Неожиданный код ответа: 503