通过 PHP 和 cURL 访问 NodeJS / Socket.io

Posted

技术标签:

【中文标题】通过 PHP 和 cURL 访问 NodeJS / Socket.io【英文标题】:Access NodeJS / Socket.io over PHP and cURL 【发布时间】:2011-10-19 11:54:03 【问题描述】:

我正在运行一个 nodejs / socket.io (v 0.7) 服务器来将数据推送到 Web 客户端。效果很好。

为了扩展应用程序,我需要通过 php 触发/影响 socket.io。我知道一个通​​过 nodejs http 服务器通过 http 使用 cURL 的解决方案。

一种可能的解决方案是在同一个 app.js 中运行 socket.io 服务器和 nodejs http 服务器。客户端与 socket.io 进行连接和通信,唯一允许的与“单独”http 服务器的连接(当然,在 socket.io 之外的另一个端口上侦听)分别来自 php 服务器通过 cURL 的 127.0.0.1。

由于两个服务器在同一个作用域,http服务器可以触发socket.io服务器上的事件。

我的问题:这有意义吗?是否有更简洁的解决方案可以从 PHP 触发 socket.io 上的事件?

【问题讨论】:

【参考方案1】:

我认为这是一种合理且直接的方法;似乎建议谨慎处理执行顺序,但这可能只是我对节点显示的不确定性。

【讨论】:

【参考方案2】:

我正在编写一个我认为很像pusher API 的解决方案。它利用房间(通道)概念。通过express 的路由,我可以 curl(通过 PHP)向房间(频道)发送消息。

io.sockets.in('your room').json.send('your json');

我想在未来(希望在一周内)开源该项目,但希望你能明白。

【讨论】:

嗨,阿尔弗雷德,不知道这是否是我要找的。无论如何,如果你有很棒的开源项目,完成后不要忘记在此处发布链接! 您曾经发布过您的解决方案吗?我对此很感兴趣。 @EsTeGe 我退步了:$,但我想继续努力。 也许你可以为它创建一个 github repo 以便社区可以帮助你。 我在考虑这个:)。我很快就会尝试在 github 上发布一些东西。【参考方案3】:

socket.io版本大于1.3.3(可能更旧),可以如下触发emit事件

//send broadcast message to all connecting clients
io.emit([message event],[your message body obj or str]);

// send to specific user
io.to([your room]).emit([message event], [your message body obj or str]);

【讨论】:

以上是关于通过 PHP 和 cURL 访问 NodeJS / Socket.io的主要内容,如果未能解决你的问题,请参考以下文章

php curl host 设置访问指定主机

lamp架构-访问控制-禁止php解析屏蔽curl命令访问

Parse 的 REST API 和 PHP Curl 请求 - 如何

PHP中使用CURL

php curl访问https 域名接口一直报错的问题

php curl - 需要使用 curl 提供对受保护目录的访问权限