2017-08-17 16 views
0

サーバー上で複数のソケットイベント/ socket.on()を実行するにはどうすればよいですか?例。socket.ioを複数のイベントに接続

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

感謝を複数のノードデータをプロットすることです!

+0

再生できません。クライアント側のコードはどのように見えますか? – robertklep

+0

やあ、ページ上のnode_data.php <スクリプトSRC = "http://192.168.0.1:8080/socket.io/socket.io.js"> ます。 QLion

+0

質問に追加してください。また、両方のタイプのメッセージ( 'node1メッセージ'と 'node2メッセージ')のリスナーは表示されません。 – robertklep

答えて

0

私は、ノード名のルックアップを実行するために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:[email protected]/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"); 
         } 

       }); 
     }); 

}); 

DBテーブル。

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

送信データ・ページ "node_update.php?ノード=ノード1 & 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?ノード=ノード1"

<!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> 

このように私は無制限のノードを使用して、それらをdbに追加することができます。

ありがとうございました!

関連する問題