用php或nodejs异步通知,没一点思路

寅春树
  • 704

经理给的要求:然后另外写个php程序,定时读取这个表格,然后把消息发送给代理的异步通知的地址上。。。
数据库表我已经弄好了,但不知道怎么弄异步通知。。。没一点概念。。。谁帮助下。
后来经理又说nodejs会效率高点,但我一点没接处过nodejs,谁能说下nodejs做这个的例子。

回复
阅读 3.8k
9 个回答

其实都是跑一个后台处理进程实现,或者使用系统定时任务。
1、php 用守护进程,在一个while里面循环判断时间,到时间之行读取表格操作
2、nodejs,也是跑一个服务,setTimeout的方式实现
3、使用系统定时任务cron 触发程序

konohanaruto
  • 892

nodejs+socket.io+php完全能实现!

node监听在一个端口上,客户端访问页面,通过websocket接收消息。像聊天室一样

楼主可以先google下socket.io,对你有很大帮助。

注:慎用ajax,此需求ajax太笨重

文件名 crond.php

<?php
do {
    $data = []; // 读取Excel代码,读取完之后是个数组没问题吧
    curl();// 使用CURL将数据传输到异步通知地址
    sleep(3600);// 休眠一小时
} while(true);

运行方式,打开CMD或者终端,找到PHP.exe/php程序所在路径,假设为\usr\bin\php,windows下假设c:\php\php.exe,执行

php crond.php

使用命令行模式运行PHP脚本时,不存在超时概念

异步的话用ajax就行了,最简单。php做一个定时执行的页面。通过ajax异步提交到数据库。

php并没有异步执行吧??异步是用ajax来实现的好不好,用jquery会不?

 $.ajax({
 type:'GET',
 url:"请求地址",
 dataType:"json",
 data:"要传的数据"
 success:function(data){
 }
});
你要是定时传送 建议你用js写个定时器,或者写个死循环 sleep下就可以的 。将数据用ajax定时调取你写的php文档 而文档就是你要定时执行的内容!可以了不??
hellocy
  • 76

服务器设置定时任务,每隔一段时间执行php 脚本(查询数据库,发送通知)

楼上几个说用ajax 的,这种方式可以实现功能但是 得有一个页面在浏览器中运行吧?
关了页面就废了

看你题干的意思,如果延时要求不是精确到秒的话,用php完全可以迅速完成的,
利用系统的定时任务,定时执行你的php脚本就行了,php脚本里面就查下表格,然后发送消息就行了,当然了,这是在cli模式下执行,没有在web下面执行,也就没有页面上的提醒功能了。

const TIME = 3600 * 10;
const request = require('request'); //一个NodeJS模块
function sendMsg(){
    //给你的服务器发数据
    request.post('http://127.0.0.1/your-interface', (err, response) => {
    
    }).form({
        data: 'ssss'
    });
    setTimeout(sendMsg, TIME);//隔一段时间执行
}
sendMsg();//开始执行
jaysun
  • 504

思路就是使用websocket

node

nodejs本身启动后就是一个服务,内置的socket.io可以方便的建立websocket链接

php

第一种方案:自己写代码,创建守护进程,建立socket监听
第二种方案:使用php扩展,swoole,不建议新手使用
第三种方案:使用workerman(php写的),启动守护进程

前端的处理就是使用websocket和创建的服务器建立长连接通讯就行了

如何做到消息推送交流呢?

使用队列

守护进程来消耗队列中的数据,新数据直接打入队列中,守护进程将队列中的数据消耗掉,分发到每个客户端。

补充

不用队列也可以的,这样只是为了防止消息太多会阻塞,可以使用workerman中的分发器,共享通讯到每个新创建的子进程,然后由子进程分发给不同的客户端。

宣传栏