将 Socket.io 浏览器客户端连接到本地 Node.js 网络服务器

Posted

技术标签:

【中文标题】将 Socket.io 浏览器客户端连接到本地 Node.js 网络服务器【英文标题】:Connecting Socket.io browser client to local Node.js Net server 【发布时间】:2017-01-07 02:41:25 【问题描述】:

我在 HTTPS 网站上启用了个人用户脚本。用户脚本正在使用 Socket.io 客户端 API 连接到我 PC 中的 Node.js TCP 服务器

服务器注意到客户端正在连接服务器,但客户端没有注意到连接,而是从浏览器控制台收到此错误

加载资源失败:net::ERR_TIMED_OUT

我不知道如何解决这个错误,但我认为这是由于 Socket.io 和 Net 彼此不兼容,或者网站不允许连接发生

这是我的客户端代码

socket.on('connect', function() 
    console.log('CONNECTED TO SERVER');
    socket.on('message', function(msg) 
        messageReceive(msg);
    );
    setInterval(runRoutine, 1000);
);

我的服务器代码

var net = require('net');

var clients = [];

var port = 8841;

net.createServer(function(socket) 

    socket.name = socket.remoteAddress + ':' + socket.remotePort;
    clients.push(socket);

    broadcast(socket.name + " has connected to the server", socket);

    socket.on('message', function(data) 
        broadcast(socket.name + "<>" + data, socket);
    );

    socket.on('end', function() 
        clients.splice(clients.indexOf(socket), 1);
        broadcast(socket.name + '<>disconnected', socket);
    );

    function broadcast(message, sender) 
        console.log(message);
        clients.forEach(function(client) 
            if(client === sender) return;
            //client.write(message);
        );
    

).listen(port);

console.log("Chat server running at port " + port);

【问题讨论】:

你不能这样做,因为服务器端的socket是一个TCP套接字,而不是socket.io套接字,所以你不会得到'message'事件。为什么你仍然使用 TCP 服务器而不是 socket.io 服务器? 【参考方案1】:

javascript 不能直接从浏览器使用 tcp 套接字,但是可以使用 websocket 和 http 协议。如果可以的话,Socket.io 会使用 websockets。所以你的服务器端应该监听 websocket 连接。 见例子here

【讨论】:

以上是关于将 Socket.io 浏览器客户端连接到本地 Node.js 网络服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 Socket.io 将客户端连接到服务器

尝试将客户端连接到服务器时出现Node.js Socket.io错误

通过socket.io连接到节点服务器的phonegap应用程序在浏览器上工作,但在应用程序中不工作

通过反向代理服务器将socket.io android客户端连接到套接字服务器

socket.io 客户端可以连接到两个不同的服务器/端口吗?

我是否可以通过socket.io和JavaScript将Unity程序连接到node.js服务器,如果可以,怎么办?