socket.emit从node.js客户端到浏览器客户端

时间:2015-07-30 12:35:26

标签: javascript node.js socket.io

我正在尝试从node.js客户端向Web客户端发出消息。我假设这必须通过服务器完成。任何帮助表示赞赏。

我在浏览器中看到的是:

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>

1 个答案:

答案 0 :(得分:2)

您可能正在让服务器侦听端口8080.而且我认为您的客户端并不在那里连接。尝试更改

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

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

此外,即使你实际连接,你需要从你的网络应用程序和节点客户端应用程序获得两个不同的套接字。因为目前,您正在从套接字获取输入并将其写入同一个套接字 - 基本上是一个echo服务器。

从io.on('connect')回调中你得到一个套接字 - 这是与SINGLE客户端的连接。如果您写信给它,那么您写信给该客户,如果您收到该客户,则会从该客户收到。 要让应用程序向所有客户广播(例如聊天),您可以执行此操作。

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);
       }
   });
});
相关问题