NodeJS Socket.io已连接始终为假

wgxvkvu9  于 2023-08-04  发布在  Node.js
关注(0)|答案(3)|浏览(110)

我的socket.connected总是false,也不能发送和接收消息。
app.js

var app = require('./config/server');    
var http = require('http').Server(app);
var io = require("socket.io")(http);

http.listen(80, function(err)
{
    console.log(err);
    console.log('Server client instagram_clone_v01 online');
});

io.sockets.on('connection', function (socket)
{
    console.log("new user connected");
});

字符串
服务器端

var sockets = io();
sockets.on('connection', function ()
{
    console.log("connected");
    sockets.emit("newPhoto");
});


客户端

const socket = io.connect("http://localhost:80");
console.log(socket.connected);

socket.on('error', function()
{
    console.log("Sorry, there seems to be an issue with the connection!");
});

socket.on('connect_error', function(err)
{
    console.log("connect failed"+err);
});

socket.on('connection', function ()
{
    console.log("connected");
    socket.on('newPhoto',function()
    {
        load_posts();
    });
});


没有一条“on”是received,甚至连“error”都没有。我怎么才能让它工作,请?

au9on6nz

au9on6nz1#

我在本地检查了你的代码。
所以问题是你正在检查:.on('connection',...)当它应该是.on('connect', ...)
试试这个修复方法:

socket.on('connect', function() {
  console.log("Connected to WS server");

  console.log(socket.connected); 

  load_posts();
});

socket.on('newPhoto', function(){
  load_posts();
});

字符串

bcs8qyzn

bcs8qyzn2#

当我使用React前端和Node Express后端构建基本的socketio应用程序时,我在v4中遇到了类似的问题。在典型的Node/React设置中,你的react应用程序将位于端口3000上,而你的express服务器将位于端口5000上,根据文档,这导致你需要设置一个开放的CORS策略,以在端口5000上启用与socketio服务器的连接。
从Socket.IOv3开始,您需要显式启用跨域资源共享(CORS)。(docs)
我只是确保我的socketio定义是这样的:

const app = express();
const httpServer = http.createServer(app);
const io = require("socket.io")(httpServer, {
  cors: {
    origin: "http://localhost:8080",
    methods: ["GET", "POST"]
  }
});

字符串
我可以在useEffect里用我的react应用程序连接。之后我看到了所有预期的日志。

useEffect(() => {
    socket = io('localhost:5000');
    socket.on('connect', () => {
      console.log('socket connected');
      console.log(socket);
    });
  }, []);

ftf50wuq

ftf50wuq3#

对于运行虚拟设备的用户来说,这是一个常见但令人困惑的错误,其中URL必须是主机的本地IP或10.0.2.2
确保你的socket连接沿着上面的定义:

`const socket = io.connect("http://10.0.2.2:5000");`

字符串

相关问题