问题标签 [ratchet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
timer - Ratchet WampServerInterface 和计时器
我想知道是否有办法从 WampServerInterface 实例启动计时器?
我看到你可以在服务器对象上设置它。但是如果有人订阅了某个事件,我需要从我的 WanpServerInterface 对象创建它。
有什么硬仗吗?
问候,
laravel - 使用 websockets 时的最佳实践?
我有一个用 Laravel 4 编写的 web 应用程序。这个应用程序使用 Ratchet,更具体地说,它使用Latchet包。作为旁注,我正在使用以下技术:
现在我得到了以下场景:
- 我有一个幻灯片,它应该通过 websocket 接收更新。
- 整个应用程序已设置好,我可以通过 ZeroMq 将新的代码更改从 PHP 发布到我的 websocket 客户端。
在我的 routes.php 中,我有以下代码,以便正确注册主题:
/li>然后,我启动棘轮服务器。
sudo php artisan latchet:listen
上传照片后,我可以运行以下代码将更新推送到正在收听我的主题的客户端(PhotoStream/client1
在本例中):
这段代码一切正常,但它是在更新的情况下。我的问题如下:
我应该如何处理客户端的初始化?
- 我应该先用普通的旧 PHP 渲染页面,然后初始化我的 websocket 客户端,然后接收进一步的更新(如果有的话)?
- 或者,当我注册一个新的 websocket 客户端时,我应该在请求中提供一个额外的参数,以便服务器通过 websockets 向我发送完整的数据?
这两个选项中的后者对我来说似乎是最好的选择,但我真的不知道如何以一种好的方式实现它。
php - Ratchet PHP WAMP - React / ZeroMQ - 特定用户广播
注意:这与使用的这个问题不同
MessageComponentInterface
。我正在使用WampServerInterface
,所以这个问题专门与那部分有关。我需要一个带有代码示例和解释的答案,因为我可以看到这对未来的其他人有帮助。
尝试为单个用户循环推送
我正在使用 Ratchet 和 ZeroMQ 的 WAMP 部分,目前我有一个推送集成教程的工作版本。
我正在尝试执行以下操作:
- zeromq 服务器已启动并运行,准备记录订阅者和取消订阅者
- 用户通过 websocket 协议在浏览器中连接
- 启动一个循环,将数据发送给请求它的特定用户
- 当用户断开连接时,该用户数据的循环将停止
我有第 (1) 和 (2) 点有效,但是我遇到的问题是第三点:
首先:如何仅向每个特定用户发送数据?广播将其发送给每个人,除非“主题”最终可能是个人用户 ID?
其次:我有一个很大的安全问题。如果我要从客户端发送想要订阅的用户 ID,这似乎是我需要的,那么用户只需将变量更改为另一个用户的 ID,然后返回他们的数据。
第三:我必须运行一个单独的 php 脚本,其中包含 zeromq 的代码来启动实际的循环。我不确定这是最好的方法,我宁愿让它完全在代码库中工作,而不是单独的 php 文件。这是我需要整理的一个主要领域。
以下代码显示了我目前拥有的内容。
刚刚从控制台运行的服务器
我从字面上输入php bin/push-server.php
来运行它。订阅和取消订阅将输出到此终端以进行调试。
通过 websocket 发送数据的 Pusher
我省略了无用的东西,专注于onMessage()
andonSubscribe()
方法。
在循环中开始使用上述 Pusher 代码的脚本
这是我的问题 - 这是一个单独的 php 文件,希望将来可以集成到其他代码中,但目前我不确定如何正确使用它。我是否从会话中获取用户 ID?我仍然需要从客户端发送它......
最后,要订阅的客户端js
结论
以上是有效的,但我真的需要弄清楚以下几点:
如何向个人用户发送个人消息?当他们访问在 JS 中启动 websocket 连接的页面时,我是否也应该启动将内容推入 PHP 队列的脚本(zeromq)?这就是我目前正在手动执行的操作,只是感觉不对。
从 JS 订阅用户时,从会话中获取用户 ID 并从客户端发送是不安全的。这可能是伪造的。请告诉我有一个更简单的方法,如果是这样,怎么做?
php - 如何使用棘轮在线显示连接的用户?
你能告诉我如何使用棘轮在线显示连接的用户吗?我的意思是我想向服务器发送某种信息,userid
并将这个 id 广播给所有其他连接的用户,表明它userid
是在线的。
php - 即使关闭 SSH 终端,如何保持 websocket 服务器运行?
所以,我正在使用带有 PHP 的 Ratchet,并且目前已经将一个成功的 websocket 示例上传到我的服务器。
它在我进入 SSH 后工作,然后手动运行“php bin/chat-server.php”。
我想知道的是,在商业情况下,我如何保持聊天服务器运行?
谢谢。
php - 在 splobjectstorage 中查找数据
问候 stackoverflow 的人们,在过去的几天里,我一直在研究 websockets 和一个名为 Ratchet 的 PHP 库(它非常适合用 PHP 编写 websockets 服务器应用程序)。在 Ratchet 官方文档中,他们建议使用 SplObjectStorage(我从未听说过)来管理客户端连接对象。
在大多数服务器应用程序中,您可能需要保留有关每个客户端的一些数据(例如,在我正在尝试编写一个简单的消息传递服务器的情况下,我需要保留诸如客户端昵称之类的数据,也许还有更多),所以据我了解它,当像下面这样打开新连接时,我可以将客户端对象和包含客户端数据的数组添加到 SplObjectStorage。
但是,我不确定通过数据数组中的值(如用户昵称)从 SplObjectStorage 获取对象的最佳方法是什么,一种方法是这样的:
但我觉得有更好的方法可以做到这一点,所以任何建议都将不胜感激。
提前致谢。
php - 将 websockets 与 PHP 和 MySQL 脚本一起使用的最佳方式是什么?
将 websockets 与 PHP 和 MySQL 脚本一起使用的最佳方式是什么?
如果我想在我的 PHP 站点中添加实时聊天,或者在实时执行 X 操作时将变量存储到 MySQL 数据库(例如,对于 RPG 网站交易)。
我找到了Ratchet,它是有效实现这些目标的好选择吗?也许同时使用 Node.js 和 PHP?我不知道该怎么办。
php - PHP WebSocket 守护进程
我已经使用作为守护进程运行的 Ratchet 在 php 中设置了一个 WebSocket 服务器 - 由 Varnish 缓存公开。
但是我在其中看到了一个大问题- php 中缺少线程。在不挂起整个服务器的情况下,我可以做些什么来传递数据进行处理?是否有可能在 PHP 中使用,或者我是否应该转向不同的技术 - 例如 node.js - 但是看到主要项目是在 PHP 中,让它一起工作会很复杂。如果有任何在 PHP 中执行此操作的选项可用,请选择它。
php - 如何使用 ZeroMQ 和 ClankBundle 实现“推送到现有站点”?
我目前在我的 Symfony2 应用程序中使用ClankBundle,需要实现Ratchet 文档中提到的Push to an Existing Site功能。但是,我没有发现有关如何使用 ClankBundle 完成此功能的任何线索!
我已经成功实现了ClankBundle 文档中的主题处理程序设置,但需要一种方法来添加对ZeroMQ的支持。
您能否演示一下(最好用代码)如何将 ZeroMQ 与 Clankbundle 一起使用?
php - 如何在 cmd 上的 talnet 正常工作时在浏览器上运行棘轮的 shell 脚本
Telnet localhost 8080 工作正常,但之后当我在 localhost 上创建 shell 脚本时,它在 firefox 和 chrome 中显示错误,见下文
Firefox can't establish a connection to the server at ws://localhost:8080/.
var conn = new WebSocket('ws://localhost:8080');
这是我的shell脚本
这是我的chat-server.php 代码'
shell 脚本保存在根目录的 info.php 中,chat-server.php 保存在 root/bin/ 目录中,但总是显示相同的错误,我不知道如何在 localhost 上运行棘轮 shell 脚本。请帮助!