Могу ли я подключиться к серверу 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.