【问题标题】:run socket.io connect with multiple events运行 socket.io 连接多个事件
【发布时间】:2017-08-17 07:39:03
【问题描述】:

如何在服务器上运行多个套接字事件/socket.on()?例如。

var express = require('express'),
app = express();
server = require('http').createServer(app);
io = require('socket.io').listen(server)

server.listen(8080);

io.sockets.on('connection', function(socket) {

        socket.on('node1', function(data){
                io.sockets.emit('node1 message', data);
        });
        socket.on('node2', function(data){
                io.sockets.emit('node2 message', data);
        });

});

当我如下运行客户端时,消息会被广播。

socket.emit('node1','Hello World');

但是在 node2 上,什么都没有通过。

socket.emit('node2','Hello World');

谢谢!

对不起,

这是我在客户端运行的(发送数据)。

<!DOCTYPE html>
<html>
<head>
<title>nodes_update</title>
</head>
<body>
<script src="http://192.168.0.1:8080/socket.io/socket.io.js"></script>
<script type="text/JavaScript">

    var socket = io('http://192.168.0.1:8080/');
        socket.emit('<?php echo $_REQUEST["node"] ?>','<?php echo $_REQUEST["node_message"] ?>');
</script>
</body>
</html>

在接收端。

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
</head>
<body>
</body>
<script src="http://192.168.0.1:8080/socket.io/socket.io.js"></script>
<script type="text/JavaScript">

            var socket = io('http://192.168.0.1:8080/');
            socket.on('<?php echo $_REQUEST["node"] ?>', function(data) {

                // plot_data(data);

            });
</script>
</html>



<?php echo $_REQUEST["node"] ?> //is the node number ex "node1" or "node2"
<?php echo $_REQUEST["node_message"] ?> //is the data of the node ex "Temp-90".

http://192.168.0.1/show_node_data.php?node=node1+message&node_message=Temp-90

这是绘制多个节点数据

谢谢!

【问题讨论】:

  • 无法复制。您的客户端代码是什么样的?
  • 嗨,在页面 node_data.php
  • 请将其添加到您的问题中。此外,我没有看到两种类型的消息(node1 messagenode2 message)的侦听器。
  • $_REQUEST 变量解析成什么?
  • 当服务器接收到一个名为node2的事件时,它会广播一个名为node2 message的事件。您需要在客户端中为该事件指定一个特定的侦听器,我不确定您是否有。

标签: node.js socket.io


【解决方案1】:

好的,我重新编写了服务器以使用 mysql 进行节点名称查找,然后将数据发送到找到的节点名称的页面,否则什么也不发送。

server.js

var express = require('express'),
app = express();
server = require('http').createServer(app);
io = require('socket.io').listen(server)
server.listen(8080);
var mysql = require('mysql');
var connection = mysql.createConnection('mysql://moo:password@localhost/node_db');
connection.connect();





io.sockets.on('connection', function(socket) {

        socket.on('send message', function(data){
                var token = data.token;
                var message = data.message;

                var queryToken = 'SELECT COUNT(*) as num FROM `node_token` where node_token = ' + connection.escape(token);

                connection.query(queryToken, function(err, rows, fields) {
                        if (err) throw err;
                        //console.log(rows[0].num);
                        //console.log(token);
                        //console.log(message);

                        var node_name = rows[0].num;

                        if(node_name != 0) {
                                console.log("Node name found in DB");
                                io.sockets.emit(token, message);
                        }else{
                        console.log("Node name not found in db");
                        }

                });
        });

});

数据库表;

+----+------------+---------------+
| id | node_token | node_owner_id |
+----+------------+---------------+
|  2 | node1      |             1 |
|  3 | node2      |             1 |
+----+------------+---------------+
2 rows in set (0.00 sec)

发送数据页“node_update.php?node=node1&node_message=temp-90”

<!DOCTYPE html>
<html>
<head>
<title>nodes_update</title>
</head>
<body>
<script src="http://192.168.0.1:8080/socket.io/socket.io.js"></script>
<script type="text/JavaScript">

    var token = <?php echo $_REQUEST["node"]; ?>;
    var message = <?php echo $_REQUEST["node_message"]; ?>;

    var socket = io('http://192.168.0.1:8080/');
    socket.emit('send message',{token:token, message:message});
</script>
</body>
</html>

接收数据页“node_get_data.php?node=node1”

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
</head>
<body>
</body>
<script src="http://192.168.0.1:8080/socket.io/socket.io.js"></script>
<script type="text/JavaScript">

            var socket = io('http://192.168.0.1:8080/');
            socket.on('<?php echo $_REQUEST["node"]; ?>', function(data) {

                //plot(data);

            });
</script>
</html>

这样我可以使用无限的节点并将它们添加到数据库中。

感谢大家的帮助!!

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2021-04-29
    • 1970-01-01
    • 2016-09-15
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多