关于Nodejs推送

关于Nodejs推送

最近才开始研究nodejs,发现这个推送真的很好用。 公司有个项目是股票行情,现在是定时用AJAX请求的,现在想整理成node推送; require(‘socket.io’) 问题来了: 项目是用PHP的CI框架做的,当数据更新了后怎么与node通信呢? 如果我用node的话,那php的模板引擎是不是也要换呢? 求大神指点! 谢谢!!

7 回复

关于Node.js推送

最近才开始研究Node.js,发现这个推送真的很好用。公司有一个项目是股票行情,目前使用的是定时通过AJAX请求来获取数据。现在计划将其改造成基于Node.js的实时推送系统。

使用Socket.IO实现推送

首先,我们需要安装socket.io库来实现实时通信。socket.io是一个非常强大的库,可以让你轻松地建立WebSocket连接,并且支持多种传输方式,包括WebSocket、长轮询等。

npm install socket.io

接下来,我们创建一个简单的Node.js服务器来处理WebSocket连接。

const http = require('http');
const socketIo = require('socket.io');

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>Hello, world!</h1>');
});

// 将HTTP服务器传递给socket.io
const io = socketIo(server);

// 当有客户端连接时触发
io.on('connection', (socket) => {
    console.log('A user connected');

    // 接收到消息时触发
    socket.on('message', (data) => {
        console.log('Message received:', data);
        // 广播消息给所有连接的客户端
        io.emit('message', data);
    });

    // 当客户端断开连接时触发
    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

PHP与Node.js通信

对于PHP应用(如CodeIgniter框架)来说,当数据更新时需要通知Node.js服务器进行推送。这里可以使用HTTP请求的方式来进行通信。例如,你可以使用curlfile_get_contents函数发送HTTP POST请求到Node.js服务器。

<?php
$data = [
    'stock' => 'AAPL',
    'price' => 150.50
];

$options = [
    'http' => [
        'method' => 'POST',
        'content' => json_encode($data),
        'header' => 'Content-Type: application/json'
    ]
];

$context = stream_context_create($options);
$result = file_get_contents('http://localhost:3000/notify', false, $context);

if ($result === FALSE) {
    // 处理错误
}
?>

在Node.js端,你需要设置一个路由来接收这些HTTP请求:

io.on('connection', (socket) => {
    // 接收HTTP POST请求
    app.post('/notify', (req, res) => {
        const data = req.body;
        console.log('Received notification:', data);
        // 广播消息给所有连接的客户端
        io.emit('message', data);
        res.send({ status: 'success' });
    });
});

模板引擎

关于模板引擎,如果你已经习惯了PHP的模板引擎(如Twig或Blade),你不需要因为使用Node.js而更换它。Node.js生态系统中有许多成熟的模板引擎,如EJS、Pug等,但你可以在服务器端继续使用PHP进行渲染,客户端只需要关注WebSocket通信即可。

希望以上内容对你有所帮助!如果有任何疑问,请随时提问。


WebSocket是标准协议,用于浏览器端和服务端通讯,跟用什么语言/框架关系不大 后端PHP跟Node之间的通讯可选方式很多,比如Node建个Socket服务,PHP发送更新消息过来

这个就是node可以替换php的实际应用场景

能举个例子吗?或者链接啥的或者大概用法啥的。
最近一直在翻文档,自学真的蛮辛苦的呢

有例子可以看一下吗?

换websocket?还不如用bigpipe,websocket ie7以上才支持吧,nodejs的部署维护监控,你们能hold住么,等着踩坑吧

要实现从Node.js向客户端推送股票行情信息,可以使用Socket.IO库。以下是具体的步骤和示例代码。

步骤:

  1. 安装Socket.IO首先需要在Node.js服务器中安装Socket.IO
  2. 创建Node.js服务器:启动一个Node.js服务器,并使用Socket.IO来处理实时通信。
  3. 前端集成:前端页面需要引入Socket.IO客户端库,以连接到Node.js服务器并接收实时数据。
  4. PHP端处理:当PHP后端检测到数据更新时,可以通过某种机制(如HTTP POST请求)通知Node.js服务器进行数据推送。

示例代码

Node.js服务器端代码(server.js)

const http = require('http');
const express = require('express');
const socketIo = require('socket.io');

// 创建Express应用
const app = express();
const server = http.createServer(app);

// 启动WebSocket服务
const io = socketIo(server);

// 当有客户端连接时触发
io.on('connection', (socket) => {
    console.log('A user connected');

    // 推送数据到客户端
    socket.emit('stockData', { price: 150 });

    // 监听客户端事件
    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

PHP端代码(发送数据更新通知)

<?php
// 模拟数据更新
$dataUpdated = true;

if ($dataUpdated) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://localhost:3000/notify");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);
}
?>

客户端JavaScript代码(client.js)

<script src="/socket.io/socket.io.js"></script>
<script>
    const socket = io('http://localhost:3000');

    socket.on('stockData', function(data) {
        console.log('Received stock data:', data.price);
        document.getElementById('price').innerText = data.price;
    });
</script>

解释

  1. Node.js服务器通过Socket.IO监听客户端连接,并在连接成功时推送股票行情数据。
  2. PHP后端可以通过HTTP POST请求向Node.js服务器发送数据更新通知,从而触发股票行情数据的推送。
  3. 客户端页面引入Socket.IO客户端库,并建立与Node.js服务器的连接,以便接收实时股票行情数据。

这种架构可以确保您的PHP应用仍然保持现有结构,只需增加一个简单的通知机制即可实现实时推送功能。

回到顶部