如何创建一个可以处理多个连接同步客户端之间通信的websocket服务器

问题描述 投票:0回答:1

这个问题有一个类似的问题这里。但有人告诉我要提出自己的问题,所以就在这里。

我有一个客户端-服务器 C# 应用程序,我想将其移植到 Web 应用程序。服务器接收数据并将其发送给客户端。当另一个客户端向服务器发送数据时,它会更新其他客户端。这个客户端-服务器应用程序显然使用 Windows 套接字来实现此目的。就在这个月,我开始编写我的第一个 PHP 项目。一般来说,它现在可以按照我的要求运行。当收到请求时将数据发送到我的网页,并将数据保存到由客户端脚本(当然是 JavaScript)发送的数据库中。现在,我的问题是,当另一个客户端对数据库进行更改时,如何通知其他客户端(就像我的 C# 应用程序那样)?我已经进行了大量的谷歌搜索,每一个结果都与 WebSocket 相关。我刚刚了解到 WebSocket 已经存在很长时间了,但就我而言,这是我第一次面对它。

我还没有尝试过任何东西,因为我不知道从哪里开始。经过如此多的搜索,我到达了这个 github page,它对我来说看起来很漂亮。但我立即担心的一件事是它的 run 方法(WebSocketServer::run)在循环中运行,这引发了第二个问题,即如何在 PHP 中运行异步操作或如何在解决第一个问题之前进行多线程处理我面临着。我倾向于使用这个脚本,但是如何在不阻止其他服务器操作的情况下运行它?

我希望我已经充分解释了我的问题,让每个人都能弄清楚我在做什么。单独用纯PHP可以实现吗?意思是,没有其他框架/库,尽管我愿意在必要时使用一个。

php websocket server
1个回答
0
投票

Websockets,正如您所提到的,需要与服务器保持连接以分发更改。 PHP 中有一些项目可以处理 websocket 连接。其中之一是由 napengam 开发的 phpWebSockerServer

一般来说,多线程和多处理是可能的,有函数和库(例如pthreads - 这是死的或并行的以及其他方法,here

即使有可能,但它并不常见,我不会使用它。

通常,当您构建 Web 应用程序并且需要将这些更改分发给其他客户端(网站上的用户)时,您将使用 AJAX 和其中一些方法:

  • 短轮询 - 客户端定期向服务器发送请求以检查是否发生任何更改。服务器立即响应数据或 304。
  • 长轮询 - 客户端向服务器发送请求,然后服务器保留该请求直到发生某些事件。然后它会响应更改的数据。
  • 或者您提到的Websockets

(您还可以使用流式或分块响应)

考虑一下,您是否需要立即提供有关变更的信息,或者是否可能延迟发生。

© www.soinside.com 2019 - 2024. All rights reserved.