Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Websocket客户端覆盖彼此的连接_Node.js_Express_Websocket_Socket.io_Lit Html - Fatal编程技术网

Node.js Websocket客户端覆盖彼此的连接

Node.js Websocket客户端覆盖彼此的连接,node.js,express,websocket,socket.io,lit-html,Node.js,Express,Websocket,Socket.io,Lit Html,我试图用Nodejs express服务器和LitComponent客户端实现一个服务器客户端示例。运行1:1配置时,服务器和客户端之间的通信工作正常。启动第二个客户端时,数据传输停止,只有新客户端接收数据 所有客户端都在localhost:3001上运行-服务器在localhost:3000上运行 如何向多个客户端连续发送数据 客户端 import short from 'short-uuid'; import { io } from 'socket.io-client'; ... con

我试图用Nodejs express服务器和LitComponent客户端实现一个服务器客户端示例。运行1:1配置时,服务器和客户端之间的通信工作正常。启动第二个客户端时,数据传输停止,只有新客户端接收数据

所有客户端都在
localhost:3001
上运行-服务器在
localhost:3000
上运行

如何向多个客户端连续发送数据

客户端

import short from 'short-uuid';
import { io } from 'socket.io-client';

...

constructor() {
    super();

    //Generate app id
    this.app_id = short.generate();
    console.log('# App-ID: ' + this.app_id);

    this.socket = io('ws://localhost:3000', { forceNew: true });

    this.socket.on('connect', () => {
      this.socket.emit('log', 'App-ID: ' + this.app_id);
    });

    this.socket.on('data', message => {
      this.receiveData(message);
    });

    this.socket.on('disconnect', function () {
      console.log('# Socket disconnected');
    });
  }

...
服务器

var app = require("express")();
const express = require("express");

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

let connectCounter = 0;

let sock;
io.on("connect", (socket) => {
    sock = socket;
    console.log("# " + socket.id + " | ■ App connected");
    connectCounter++;
    console.log("# New connection - now have " + connectCounter);
    socket.on("disconnect", () => {
        connectCounter--;
        console.log("# Lost connection - now have " + connectCounter);
    });
    socket.on("log", (message) => {
        console.log("# " + socket.id + " | " + message);
    });
});

function sendData(msg) {
    sock.emit("data", msg);
}

...

http.listen(3000, () => {
    console.log("# HTTP: listening on *:3000");
});

在服务器端,您有:

let sock;
io.on("connect", (socket) => {
    sock = socket;
    ...
});

function sendData(msg) {
    sock.emit("data", msg);
}
你能看到这里有问题吗?每次新用户连接时,您都将其设置为全局
sock
,然后只发送到该套接字。相反,您需要将所有套接字保留在某个集合中,如下所示:

let sockets = {};

io.on("connect", (socket) => {
    sockets[socket.id] = socket;
    ...
    socket.on("disconnect", () => {
        ...
        delete sockets[socket.id];
    });
});

function sendData(msg) {
    for (var socket_id in sockets) {
        sockets[socket_id].emit("data", msg);
    }
}

AFAIK socket.io已经为您提供了这些功能,但我不记得具体的属性(自从我处理socket.io以来已经有一段时间了),因此您必须阅读api。

在服务器端,您有:

let sock;
io.on("connect", (socket) => {
    sock = socket;
    ...
});

function sendData(msg) {
    sock.emit("data", msg);
}
你能看到这里有问题吗?每次新用户连接时,您都将其设置为全局
sock
,然后只发送到该套接字。相反,您需要将所有套接字保留在某个集合中,如下所示:

let sockets = {};

io.on("connect", (socket) => {
    sockets[socket.id] = socket;
    ...
    socket.on("disconnect", () => {
        ...
        delete sockets[socket.id];
    });
});

function sendData(msg) {
    for (var socket_id in sockets) {
        sockets[socket_id].emit("data", msg);
    }
}

AFAIK socket.io已经为您提供了这些功能,但我不记得具体的属性(我已经有一段时间没有处理socket.io了),因此您必须阅读api。

您好,请看一下我的问题您好,请看一下我的问题