簡體   English   中英

從node.js客戶端到瀏覽器客戶端的socket.emit

[英]socket.emit from node.js client to browser client

我正在嘗試從node.js客戶端向Web客戶端發出一條消息。 我假設這必須通過服務器來完成。 任何幫助表示贊賞。

我在瀏覽器中看到的erorr是:

GET http://10.1.0.47/socket.io/?EIO=3&transport=polling&t=1438260260496-8 net::ERR_CONNECTION_REFUSED

node.js客戶端:

socket.emit('clientMessage', jsonData, 'Pi-Voyager');

服務器:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

var port = process.env.PORT || 8080;

server.listen(port, function() {
    console.log('Gulp is starting my app on PORT: ' + port)
});

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html');
});

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

    socket.on('clientMessage', function(jsonData, from) {
        socket.emit('serverMessage', 'Got a message!', jsonData);
        console.log('Data being sent from', from, 'is:\n' + jsonData);
    });

});

網絡客戶端:

<body>
    <h1>9.html</h1>
    <div id="messages"></div>
    <script src="/socket.io/socket.io.js"></script>
    <script>

        var socket = io.connect("/");

        socket.on("serverMessage", function(msg) {
            document.getElementById("messages").innerHTML += msg + "<br>";
        })

    </script>   
</body>

您可能正在讓服務器在端口8080上偵聽。我認為您的客戶端沒有連接到那里。 嘗試改變

var port = process.env.PORT || 8080;

var port = process.env.PORT || 80;

另外,即使您實際連接,也需要從Web應用程序和節點客戶端應用程序中獲得兩個不同的套接字。 因為當前,您正在從套接字獲取輸入並將其寫入同一套接字-基本上是回顯服務器。

從io.on('connect')回調中,您獲得一個套接字-這是與單個客戶端的連接。 如果您對其進行寫操作,那么您將對該客戶端進行寫操作;如果您從該客戶端進行接收,那么您將從該客戶端接收操作。 要使應用廣播到所有客戶端(例如聊天),您可以執行此操作。

var sockets = [];
io.on('connection', function(socket) {
   sockets.push(socket);
   socket.on('clientMessage', function(jsonData) {
       for(var i = 0, len = sockets.length; i < len; ++i) {
           sockets[i].emit('serverMessage', 'Got a message!', jsonData);
       }
   });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM