我可以使用泛型方法连接到socket.io服务器吗?

时间:2017-04-01 01:11:51

标签: javascript node.js websocket socket.io fme

我有一个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>

它没有问题。现在,我的同事想要从他的FME服务器连接到websocket服务器。基于他的研究,他可以使用连接到websocket服务器的唯一方法是使用这样的URL:

ws://localhost:3000/websocket

我的问题是:有没有办法使用这种类型的字符串连接到socket.io服务器侦听器?

如果没有,有没有办法用ws://host:port url创建一个websocket服务器,并将它附加到我的node.js服务器上?

或者,有没有办法连接到FME服务器中的socket.io监听器?

1 个答案:

答案 0 :(得分:0)

要告诉Socket.IO仅使用WebSocket,请在服务器上添加:

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

在客户端上添加:

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

现在您只能使用ws协议连接到WebSocket服务器。