Могу ли я подключиться к серверу socket.io универсальным методом?

У меня есть сервер node.js, и я подключил к нему слушатель socket.io. Код такой.

const server = new Hapi.Server();
    server.connection({
        "port": config.port
    });

let io = socketio(server.listener);
io.on("connection", function(socket) {
        console.log("A user connected");

        socket.on("disconnect", function(){
            console.log("A user disconnected");
        });

        // receive message from client
        socket.on("client-server", function(msg) {
            console.log(msg);
        });
    });

// somewhere to emit message
io.emit("server-client", "server to client message");

Обычно я использую стандартный способ подключения к серверу websocket. Пример таков:

<!DOCTYPE html>
<html>
  <head><title>Hello world</title></head>
  <script src="http://localhost:3000/socket.io/socket.io.js"></script>
  <script>
    var socket = io();
    socket.on('server-client', function(data) {document.write(data)});
    socket.emit('client-server', 'test message');
  </script>
  <body>Hello world</body>
</html>

Работает без проблем. Теперь мой коллега хочет подключиться к серверу websocket со своего сервера FME. Основываясь на его исследованиях, единственный способ, которым он может подключиться к серверу веб-сокетов, - использовать URL-адрес, подобный следующему:

ws://localhost:3000/websocket

Мой вопрос: есть ли способ подключиться к слушателю сервера socket.io, используя этот тип строки?

Если нет, есть ли способ создать сервер веб-сокета с ws://host:port URL, а также прикрепить его к моему серверу node.js?

Или есть ли способ подключения к слушателю socket.io на сервере FME?

1 ответ

Чтобы указать Socket.IO использовать только WebSocket, добавьте это на сервер:

io.set('transports', ['websocket']);

И на клиенте добавьте это:

var socket = io({transports: ['websocket']});

Теперь вы можете подключиться к серверу WebSocket только по протоколу ws.

Другие вопросы по тегам