从服务器到客户端的socket.io数据

从服务器到客户端的socket.io数据,socket.io,Socket.io,server.js var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); app.use(express.static(__dirname + '/public')); io.on('connection', function(client) { conso

server.js

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

app.use(express.static(__dirname + '/public'));

io.on('connection', function(client) {
    console.log('Client connected...');

client.on('join', function(data) {
    console.log(data);
    io.emit('messages', 'Hello');

});

});
index.html

<script>
    var socket = io.connect('http://localhost:7777');
    socket.on('connect', function(data) {
      socket.emit('join', 'Hello World from client');

    });
    socket.on('messages', function(data) {
      alert(data);
    });
</script>

var socket=io.connect('http://localhost:7777');
socket.on('connect',函数(数据){
emit('join','helloworld fromclient');
});
socket.on('messages',函数(数据){
警报(数据);
});
我试图实现Socket.io的基本功能

然而,从客户端到服务器的数据发送是可用的,但从服务器到客户端的数据发送不起作用

在运行server.js的命令中,会打印“Hello World from client”。但是,警报窗口在web浏览器中不起作用(我还尝试了console.log)

如何解决这个问题

编辑的

我已经将server.js代码放在app.get('/',function(req,res)){…}
然后,它就不起作用了。为什么它在app.get中不起作用?

试试这个,我希望它能起作用:

io.on('connection', function(client) {
console.log('Client connected...');

client.on('join', function(data) {
        console.log(data);
        io.emit('join', data);  //this code sending data from server to client
    });
});

如果您只是尝试使用Ajax调用(如
/test
)获取一些数据,那么就不需要使用socket.io。这只是一个典型的请求/响应

app.get('/test', function(req, res) {
    // collect your data and then send it as a response
    res.json(data);
});
如果您只是试图将数据合并到所请求的网页中,则可以使用
res.render()
和您选择的模板引擎(ejs、Handlebar、pug等)。这通常是这样的:

app.get('/test', function(req, res) {
    // collect your data and then pass it to res.render() to render your
    // your template using that data
    res.render('someTemplateName', data);
});
socket.io的主要用途是在没有客户端请求的情况下将数据从服务器“推”到客户端。因此,如果服务器上发生了客户端不知道的事情,并且服务器想告诉客户端,那么socket.io将用于此。典型的例子是聊天应用程序。Person A向服务器发送一条聊天消息,地址是Person B。服务器接收到该消息,然后需要将其“推送”给Person B。这对于已经连接的socket.io连接来说是完美的,因为服务器可以直接将数据推送到Person B客户端,这是服务器无法处理请求/响应的(因为没有人B的要求)


如果您仍然认为需要socket.io,请准确描述您正试图使用它做什么(一步一步地向客户发送什么)


请将“messages”更改为对我有效的“message”

太遗憾了!谢谢你,伙计。我将这些代码与其他代码混合在一起,因此错过了该代码。socket.io代码不属于特定路径。如果你能解释一下你试图用
app.get()做什么
是您问题的一部分,您可以向我们展示您在
app.get()中添加的代码
那么也许我们可以提供一个建议。但是,现在您的问题的这一部分非常模糊和不清楚。谢谢您的回答。我正在尝试使用node.js从elasticsearch检索数据并将其发送到前端。我发现有几种解决方案使用ejs或pug。我尝试将模板与pug和vue.j一起使用但是我想做的(与google map api结合)工作不太好。这就是我选择socket.io的原因。此外,我认为在输入app.get('/test',…)等特定url时,最好将数据从服务器发送到前端。感谢您的回答。我发现了使用类似您的模板引擎的解决方案。但是,我使用socket.io的原因是我不知道如何合并模板引擎和google map api。例如,如果
res.render中的数据('someTemplateName,data);
是一组坐标,我想使用这些坐标制作热图。在这种情况下,是否可以合并模板引擎和google map api?@coffeedjason-您从google maps api收集数据,并将其以模板所需的格式放置,然后将其传递给
res.render()
。我仍然不明白socket.io与这里的解决方案有什么关系,除非在没有客户端请求的情况下,您需要从服务器到客户端的实时推送。谢谢jfriend00。我认为我的解释不太好。我想做的是检索数据(坐标)从数据库中,使用google map api在前面表示这些坐标。为此,我想将json(坐标)数组传递到前面,并在前面解压缩此数组以表示每个坐标。为此,如果我使用
res.render()
,据我所知,我需要在服务器端使用模板引擎呈现html文件。在这个阶段,是否可以使用类似google maps的api呈现html文件?@coffeedjason-您可以“呈现”将数据放入脚本标记中的Javascript数组中,客户端Javascript可以将该数组与Google Maps一起使用来显示数据。我对这一点感到困惑。
res.render()
不需要将模板作为第一个参数吗?是否可以仅使用
res.render()呈现Javascript数组
?据我所知,
res.render()
和模板引擎正在首先生成html文件并将其发送到前端。然后,我需要处理模板文件中的javascript数组吗?还是只将数据发送到前端,客户端javascript处理该数据?很抱歉回答了这么多问题。
   socket.on("message",function (reply_data) {
        console.log('inside on message functions ')
        console.log(reply_data);
    })