关于Nodejs推送
关于Nodejs推送
最近才开始研究nodejs,发现这个推送真的很好用。 公司有个项目是股票行情,现在是定时用AJAX请求的,现在想整理成node推送; require(‘socket.io’) 问题来了: 项目是用PHP的CI框架做的,当数据更新了后怎么与node通信呢? 如果我用node的话,那php的模板引擎是不是也要换呢? 求大神指点! 谢谢!!
关于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请求的方式来进行通信。例如,你可以使用curl
或file_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库。以下是具体的步骤和示例代码。
步骤:
- 安装Socket.IO:首先需要在Node.js服务器中安装Socket.IO。
- 创建Node.js服务器:启动一个Node.js服务器,并使用Socket.IO来处理实时通信。
- 前端集成:前端页面需要引入Socket.IO客户端库,以连接到Node.js服务器并接收实时数据。
- 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>
解释
- Node.js服务器通过Socket.IO监听客户端连接,并在连接成功时推送股票行情数据。
- PHP后端可以通过HTTP POST请求向Node.js服务器发送数据更新通知,从而触发股票行情数据的推送。
- 客户端页面引入Socket.IO客户端库,并建立与Node.js服务器的连接,以便接收实时股票行情数据。
这种架构可以确保您的PHP应用仍然保持现有结构,只需增加一个简单的通知机制即可实现实时推送功能。