【问题标题】:NodeJS - Send socket when paramaters from url is receivedNodeJS - 收到来自 url 的参数时发送套接字
【发布时间】:2017-06-14 13:57:00
【问题描述】:

当收到 url 中的获取请求 ?server 时,我正在尝试使用 socket.io 发送套接字。我正在加载将从 node.js 服务器发送的 json 文件重定向页面的按钮。

收到get请求后,会向服务器发送一个socket。问题出在服务器端,由于某种原因没有收到套接字。

index.html

    <script src="jquery.js"></script>
    <script src="jquery-ui.js"></script>
    <script src="jquery-ui.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <link href="https://fonts.googleapis.com/css?family=Bungee|Roboto" rel="stylesheet">

    <div id="channels" style="height: 100%; width: 100%; position: absolute; top: 0%; left: 0%; background-color: #000;"></div>

    <style>
        html {
            color: #fff;
        }
    </style>

    <script>

function getParameterByName(name, url) {
    if (!url) {
      url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

    var socket = io();

    socket.on("server", function(server){
        console.log(server);
        $("#channels").append("<a href='?server="+server+"'><h1>"+server+"</h1></a>");
    });

    var server = getParameterByName("server");
            console.log("Connecting to",server);
            socket.emit("connect", server);

    </script>

server.js

   process.stdout.write('\033c'); // Clear the console on startup

var
   express = require("express"),
   app = express(),
   http = require("http").Server(app),
   io = require("socket.io")(http),
   path = require("path"),
   colorworks = require("colorworks").create();

      http.listen(8080, function(){
         console.log("server is running on port 8080");
      });

            app.use(express.static(__dirname + "/public2"));

            app.get("/", function(request, response){
                response.sendFile(__dirname + "/public2/index.html");
                console.log("Served file to client");
            });

    var database = require("./json/database_original.json");
    var number_servers = Object.keys(database.servers).length;

io.on("connection", function(socket){

    for (var i = 0; i < number_servers; i++){
        socket.emit("server", database.servers[i].serverJOIN);
        console.log("Server name sent: " + database.servers[i].serverJOIN);
    }

    socket.on("connect", function(server){
        console.log("Socket received: " + server);
    });

});

database.json

    {
        "servers": [
            {
                "serverNAME": "server1",
                "serverJOIN": "@server1"
            },
            {
                "serverNAME": "server2",
                "serverJOIN": "@server2"
            },
            {
                "serverNAME": "server3",
                "serverJOIN": "@server3"
            }
        ]
    }

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    您可能想使用 express-io 来代替,因为这是专门为此设计的,或者如果您正在构建实时 Web 应用程序,请尝试使用已经集成了 socketIO 的sailsjs。

    https://stackoverflow.com/a/23282360/4394814

    参考这个,可能对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2016-07-28
      • 1970-01-01
      • 2010-11-13
      • 2017-01-12
      • 2013-11-19
      • 2013-06-18
      相关资源
      最近更新 更多