Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用PHP通知NodeJS服务器一些事情?_Node.js_Socket.io - Fatal编程技术网

Node.js 如何使用PHP通知NodeJS服务器一些事情?

Node.js 如何使用PHP通知NodeJS服务器一些事情?,node.js,socket.io,Node.js,Socket.io,我想给一个基于PHP的论坛添加一个实时功能——新帖子一经创建就会自动显示给用户 我发现PHP代码和NodeJS+socket.io之间的交互有点混乱 我如何通知NodeJS服务器关于新帖子的信息,并让服务器通知正在监视帖子发布线程的客户端 编辑 我尝试了下面的代码,它似乎是有效的,我唯一的问题是这是否被认为是一个好的解决方案,因为它看起来有点混乱 我使用socket.io在端口81上监听客户端,运行om端口82的服务器只供论坛使用——创建新帖子时,PHP脚本会向端口82上的localhost发送

我想给一个基于PHP的论坛添加一个实时功能——新帖子一经创建就会自动显示给用户

我发现PHP代码和NodeJS+socket.io之间的交互有点混乱

我如何通知NodeJS服务器关于新帖子的信息,并让服务器通知正在监视帖子发布线程的客户端

编辑

我尝试了下面的代码,它似乎是有效的,我唯一的问题是这是否被认为是一个好的解决方案,因为它看起来有点混乱

我使用socket.io在端口81上监听客户端,运行om端口82的服务器只供论坛使用——创建新帖子时,PHP脚本会向端口82上的localhost发送一个post请求以及数据

这样行吗

var io = require('socket.io').listen(81);

io.sockets.on('connection', function(socket) {
    socket.on('init', function(threadid) {
        socket.join(threadid);
    });
});

var forumserver = require('http').createServer(function(req, res) {
    if (res.socket.remoteAddress == '127.0.0.1' && req.method == 'POST') {
        req.on('data', function(chunk) {
            data = JSON.parse(chunk.toString());
            io.sockets.in(data.threadid).emit('new-post', data.content);
        });
    }

    res.end();
}).listen(82);

关于PHP代码/论坛与Node.JS的交互,您可能需要创建一个API端点,该端点可以侦听对论坛所做的更改。根据您的论坛软件的不同,您可能希望挂接到创建新帖子的过程中,并在此时执行对Node.js的API回调

Socket.io开箱即用,面向通过Javascript在前端连接的站点访问者。当节点服务器接收到一个新帖子更新的通知时,它将通知连接的客户端这个新帖子及其详细信息,此时它可能会向访问者正在查看的页面的DOM添加新的HTML


您可能希望安排Socket.io部分的内容,以便用户只订阅他们在特定房间(如“Subflum123”)中发出的特定事件,以便他们只接收适用帖子的通知。

关于PHP代码/论坛与Node.JS的交互,您可能需要创建一个API端点,该端点可以侦听对论坛所做的更改。根据您的论坛软件的不同,您可能希望挂接到创建新帖子的过程中,并在此时执行对Node.js的API回调

Socket.io开箱即用,面向通过Javascript在前端连接的站点访问者。当节点服务器接收到一个新帖子更新的通知时,它将通知连接的客户端这个新帖子及其详细信息,此时它可能会向访问者正在查看的页面的DOM添加新的HTML


您可能希望安排Socket.io部分的内容,以便用户只订阅他们在特定房间(如“子流程123”)中发出的特定事件因此,他们只接收适用帖子的通知。

您的HTTP服务器在特殊端口上运行的解决方案正是我在遇到类似问题时最终得到的解决方案。PHP应用程序只使用
发布到节点服务器,然后节点服务器将消息推送到socket.io

但是,您的HTTP服务器实现已中断。
数据
事件是一个事件;流不发出消息,它们发出数据块。换句话说,请求实体数据可以被分割并以两个块的形式发出

如果
data
事件发出部分数据块,
JSON.parse
几乎肯定会引发异常,节点服务器将崩溃

您需要手动操作,或者(我的建议)为您的HTTP服务器使用更健壮的框架,如:


PHP只需要发送到http​://localhost:82/post/1234,实体主体包含
内容
。(JSON、URL编码或多部分编码的实体是可以接受的。)确保防火墙阻止公共接口上的端口82。

在特殊端口上运行HTTP服务器的解决方案正是我在遇到类似问题时得到的解决方案。PHP应用程序只使用
发布到节点服务器,然后节点服务器将消息推送到socket.io

但是,您的HTTP服务器实现已中断。
数据
事件是一个事件;流不发出消息,它们发出数据块。换句话说,请求实体数据可以被分割并以两个块的形式发出

如果
data
事件发出部分数据块,
JSON.parse
几乎肯定会引发异常,节点服务器将崩溃

您需要手动操作,或者(我的建议)为您的HTTP服务器使用更健壮的框架,如:


PHP只需要发送到http​://localhost:82/post/1234,实体主体包含
内容
。(可以接受JSON、URL编码或多部分编码的实体。)确保防火墙阻止公共接口上的端口82。

谢谢,我的问题是如何实际执行对Node.js的API回调?我的一个想法是使用一个仅由论坛软件使用的事件(Node.js服务器将确保客户端的IP与论坛的IP相同),然后进行广播。不过我想这有点混乱,我相信有一种更简洁的方法可以做到这一点。谢谢,我的问题是如何实际执行对Node.js的API回调?我的一个想法是使用一个仅由论坛软件使用的事件(Node.js服务器将确保客户端的IP与论坛的IP相同),然后进行广播。我想这有点混乱,我相信有一个更整洁的方法来完成。谢谢,这是有道理的。我应该将两台服务器放在同一个文件中,还是将它们拆分为两个文件,然后再拆分为两个node.js实例?您需要一个node实例,但这并不意味着您必须将所有内容都放在一个文件中。在主app.js中,
require('./forumserver.js')(io)。将论坛服务器内容移动到该文件中,并用
exports=module.exports=functio将其包装
var express = require('express'), forumserver = express();
forumserver.use(express.bodyParser()); // handles buffering and parsing of the
                                       // request entity for you
forumserver.post('/post/:threadid', function(req, res) {
    io.sockets.in(req.params.threadid).emit('new-post', req.body.content);
    res.send(204); // HTTP 204 No Content (empty response)
});

forumserver.listen(82);