【问题标题】:Transfer msg with nodejs / socket.io to nodejs / express使用 nodejs / socket.io 将 msg 传输到 nodejs / express
【发布时间】:2018-02-09 00:08:04
【问题描述】:

我无法让我的应用程序按我的意愿运行...我要做的是从 socket.io 客户端 (emitter.js) 向 socket.io 服务器 (receiver.io) 发送一条消息。 js) 然后在使用 Express/EJS (index.ejs) 生成的页面上显示消息

到目前为止,我成功的是:

// receiver.js
// This script initiates a simple HTML page using Express/EJS
// and then wait for socket.io connection on port 3000
const express = require('express')
const app = express()
const http = require('http')

app.set('view engine', 'ejs')
app.use(express.static('public'))

app.get('/', function (req, res) {
    res.render('index.ejs', {params: 'some_params'})
})

app.server = http.createServer(app)

var io = require('socket.io')(app.server)
io.on('connection', function (socket) {
    socket.emit('init', 'Init OK !')
    console.log('init page ok')
    socket.on('new_data', function(msg) {
        console.log('socket.on received new data : ', msg)
        socket.emit('new_data', 'Test')
    })
})

app.server.listen(3000, function () {
  console.log('Main app listening on port 3000')
})

以及附加的 index.ejs 文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="/socket.io/socket.io.js"></script>
</head>

<body>
    <div id='new_msg'></div>


    <script type="text/javascript">
        $(document).ready(function() {
        var socket = io()
        socket.on('init', function(msg) {
            console.log(msg)
            $('#new_msg').html(msg)
        })
        socket.on('new_data', function(msg) {
            console.log(msg)
            $('#new_msg').html(msg)
        })
    });
</script>
</body>

最后是emitter.js 脚本:

// emitter.js
// Open io on port 3000 and then send a msg
var io = require('socket.io-client')
var socket = io.connect('http://localhost:3000')
socket.on('connect', function() {
    socket.emit('new_data', 'some_new_data')
    console.log('Send some_new_data')
})

然后我使用node receiver.js 运行服务器 应用程序启动,在控制台中我有消息:主应用程序正在侦听端口 3000,当我打开浏览器到 http://localhost:3000 时,我可以看到第一条消息 Init OK!

因此,receiver.js 可以成功发送到 index.ejs !

然后我使用node emitter.js 运行客户端。在发射器的控制台中,我有消息“发送 some_new_data”,在接收器的控制台中,我有消息“socket.on received new data : some_new_data”。

因此,emitter.js 可以成功发送到receiver.js,receiver.js 可以成功接收。

但是,我的问题是,最后一行 socket.emit('new_data', 'Test') 没有执行(或不起作用),因为 HTML 页面根本没有刷新......

所以,我不明白为什么在初始化期间消息会从接收器发送到 index.ejs,但在 ??...

如果有人对这个问题有一些想法,任何帮助都将非常感激!

【问题讨论】:

  • 我很困惑。您有两个节点应用程序和一个浏览器页面?并且,一个应用程序将一个 socket.io 消息发送到另一个节点应用程序。那么,你想在那之后发生什么?
  • receiver.js 收到new_data 消息时,它会收到socket.emit('new_data', 'Test')。这只是发送回发送消息的套接字(这是另一个节点应用程序emitter.js)。这不会发送到网页。您是否尝试向所有连接的网页进行广播?如果是这样,你可以这样做io.emit('new_data', 'Test')
  • 天啊,它就是这样工作的!...非常感谢,这正是我想要的:-)!

标签: node.js express socket.io


【解决方案1】:

receiver.js 收到new_data 消息时,它会:

socket.emit('new_data', 'Test')

这只是发送回发送消息的套接字(这是另一个节点应用程序emitter.js)。这不会发送到网页。

如果您尝试向所有连接的网页广播,那么您可以这样做:

io.emit('new_data', 'Test')

【讨论】:

  • 感谢 jfriend00 的帮助,现在效果很好!
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2018-03-07
  • 1970-01-01
  • 2012-01-16
  • 2012-11-07
  • 1970-01-01
相关资源
最近更新 更多