问题描述
我正在尝试从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>
1楼
ralh
2
已采纳
2015-07-30 13:08:35
您可能正在让服务器在端口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);
}
});
});