Я создал сервер nodejs WebSocket, используя библиотеку ws.
Я хочу добавить модуль в Android для общения с администратором.
socket.js
const Messages = require('../models/index').Messages;
module.exports = (httpsServer) => {
const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({
server: httpsServer
});
wss.on('connection', function connection(ws) {
console.log('connected');
ws.on('message', function incoming(message) {
console.log('received: %s', message);
let jsonObject = JSON.parse(message);
switch (jsonObject.class) {
case "userIdFromUser":
Messages.findAll({
attributes: ['message', 'roomId', 'senderId', 'createdAt'],
where: {
roomId: jsonObject.data.senderId
},
order: [
['createdAt', 'ASC']
]
}).then(message => {
let response = {
"class": "getAllMessages",
"data": message
};
wss.clients.forEach(function each(client) {
if (client != ws) {
console.log('client opened');
client.send(JSON.stringify(response));
}
});
});
break;
case "messageToAdmin":
Messages.create({
roomId: jsonObject.data.senderId,
senderId: jsonObject.data.senderId,
message: jsonObject.data.message
}).then(message => {
let response = {
"class": "messageToUser",
"data": message
};
wss.clients.forEach(function each(client) {
if (client != ws) {
console.log('client opened');
client.send(JSON.stringify(response));
}
});
});
break;
case "messageToUser":
Messages.create({
roomId: jsonObject.data.senderId,
senderId: "1", //administrator
message: jsonObject.data.message
}).then(message => {
let response = {
"class": "messageToAdmin",
"data": message
};
wss.clients.forEach(function each(client) {
if (client != ws) {
console.log('client opened');
client.send(JSON.stringify(response));
}
});
});
break;
default:
break;
}
});
});
};
Для Android я использую okhttp, nkzawa / socket.io-client, nv-websocket-client, библиотеки TooTallNate / Java-WebSocket для подключения к серверу веб-сокетов,
Все библиотеки работают, но только для одного пользователя.При подключении со второго устройства сообщения не принимаются.Когда пользователь отправляет сообщение администратору, событие onMessage не запускается.
Из вышеперечисленных библиотек, охтпп лучше для подключения и переподключения.Я попытался добавить forceNewConnection (true) для okhttp, но я не нашел хороший пример для этого.
Как мне решить проблему.Спасибо за совет ...