Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript socket.io已连接客户端的刷新列表_Javascript_Node.js_Websocket_Socket.io - Fatal编程技术网

Javascript socket.io已连接客户端的刷新列表

Javascript socket.io已连接客户端的刷新列表,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,目前,我有一个websocket服务器,它为每个连接生成一个uuid并将其传递到客户端,在客户端,我更新了一个包含所有连接的简单列表。我希望看到原始connaction的列表刷新,让我来说明我的意思: 打开一个选项卡-第一个客户端连接,我在屏幕上看到我的uuid 名单 我打开一个新选项卡,连接到websocket,我看到 以前连接的ID和新ID 现在,当我回到tab 我没有看到两个连接,只有第一个连接。 如何刷新此列表,使websocket 建立连接后,将刷新所有用户的uuid列表 连接的客户端

目前,我有一个websocket服务器,它为每个连接生成一个uuid并将其传递到客户端,在客户端,我更新了一个包含所有连接的简单列表。我希望看到原始connaction的列表刷新,让我来说明我的意思:

  • 打开一个选项卡-第一个客户端连接,我在屏幕上看到我的uuid 名单
  • 我打开一个新选项卡,连接到websocket,我看到 以前连接的ID和新ID
  • 现在,当我回到tab 我没有看到两个连接,只有第一个连接。 如何刷新此列表,使websocket 建立连接后,将刷新所有用户的uuid列表 连接的客户端
  • 我目前的代码如下:

    服务器:

    var http = require("http"), io = require("socket.io"), uuid = require ("node-uuid");
    var connectedPlayers = new Array();
    var server = http.createServer(function(req, res) { 
      // Send HTML headers and message
      res.writeHead(200,{ "Content-Type": "text/html" }); 
      res.end("<h1>Server is ready & listening</h1>");
    });
    server.listen(1222, "1.1.1.1");
    
    var socket = io.listen(server);
    socket.set('log level', 0);
    
    socket.on("connection", function(client) {
      client.on("connection", function(){
        console.log("Client connected.");
      });
    
      client.on("disconnect",function(client){
        //connected--;
        console.log("Client disconnected.");
      });
    
      client.userid = uuid();
      console.log(client.userid);
      connectedPlayers.push(client.userid);
      client.emit("onconnected", {playersId: connectedPlayers});
    });
    
    var http=require(“http”)、io=require(“socket.io”)、uuid=require(“节点uuid”);
    var connectedPlayers=新数组();
    var server=http.createServer(函数(req,res){
    //发送HTML标题和消息
    res.writeHead(200,{“内容类型”:“text/html”});
    res.end(“服务器已准备就绪并正在侦听”);
    });
    服务器监听(1222,“1.1.1.1”);
    var socket=io.listen(服务器);
    socket.set('日志级别',0);
    socket.on(“连接”,函数(客户端){
    client.on(“连接”,函数(){
    log(“客户端已连接”);
    });
    打开(“断开”),功能(客户端){
    //连接--;
    log(“客户端已断开连接”);
    });
    client.userid=uuid();
    console.log(client.userid);
    connectedPlayers.push(client.userid);
    emit(“onconnected”,{playersId:connectedPlayers});
    });
    
    客户:

    var socket = io.connect("1.1.1.1:1222");
    
            console.log(socket);
            socket.on("connect",function() {
                console.log("Client has connected to the server");
            });
    
            socket.on("disconnect",function() {
                console.log("The client has disconnected from the server");
            });
    
            socket.on("error", function(message) {
                console.log("It is not possible to connect to the server: " + message);
            });
    
            socket.on("onconnected", function(data) {
                for (var i = 0; i < data.playersId.length; i++)
                    $("#players").append("<li>" + data.playersId[i] + "</li>");
            });
    
    var socket=io.connect(“1.1.1.1:1222”);
    控制台日志(套接字);
    socket.on(“连接”,函数(){
    log(“客户端已连接到服务器”);
    });
    socket.on(“断开”,函数(){
    log(“客户端已断开与服务器的连接”);
    });
    socket.on(“错误”,函数(消息){
    log(“无法连接到服务器:+消息”);
    });
    socket.on(“未连接”,函数(数据){
    对于(变量i=0;i”+data.playersId[i]+“”);
    });
    

    (当然:

      您需要使用“io.sockets.emit”而不是“client.emit”发出事件

      将服务器脚本中的最后一行更改为:

        client.emit("onconnected", {playersId: connectedPlayers});
      
      致:

      要在列表中添加值,我的方式如下所示:

      socket.on("onconnected", function(data) {
          var tmp = document.getElementById("players");
          for (var i in data.playersId)
              tmp.innerHTML += "<li>" + data.playersId[i] + "</li>";
      });
      
      socket.on(“未连接”),函数(数据){
      var tmp=document.getElementById(“玩家”);
      for(data.playersId中的变量i)
      tmp.innerHTML++=“
    • ”+data.playerId[i]+“
    • ”; });
      将client.emit更改为socket.emit或广播(),我已更改为socket.emit(),但我的客户端似乎没有接收到任何内容,客户端从未调用过“onconnected”函数。我想我缺少了一些内容:index.js:26 io.sockets.emit(“onconnected”,{playersId:connectedPlayers});^TypeError:无法调用UndefinedTery的方法'emit'更改` socket.on(“连接”,函数(客户机){`用于io.sockets.on(“连接”,函数(客户机){`然后我得到:无法调用undefinedoh的方法'on',我看到您使用的是'var socket=io.listen(服务器)',而我通常使用'io=io.listen(服务器)'’。然后,我认为它应该与socket.sockets.on(“连接”、…)和socket.sockets.emit(…)一起使用。希望这次可以。确实可以,谢谢Riwels。但是,它仍然不能解决我原来的问题。选项卡1的列表仍然没有更新,我想我必须强制刷新列表,对吗?
      socket.on("onconnected", function(data) {
          var tmp = document.getElementById("players");
          for (var i in data.playersId)
              tmp.innerHTML += "<li>" + data.playersId[i] + "</li>";
      });