Websocket клиент? - PullRequest
       18

Websocket клиент?

0 голосов
/ 06 декабря 2018

Я создал сервер 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, но я не нашел хороший пример для этого.

Как мне решить проблему.Спасибо за совет ...

...