【问题标题】:How can I establish connection between a client and a server where the server sends new messages to the client?如何在服务器向客户端发送新消息的客户端和服务器之间建立连接?
【发布时间】:2015-11-09 09:12:45
【问题描述】:

我需要通过 PHP websocket 建立客户端和服务器之间的连接。

服务器将需要不断检查外部 API 是否有新消息并将它们发送到客户端。

我想了解这个概念,以便编写代码。我有一些问题可以帮助我解决问题。

客户端 我是使用 javascript 的 setInterval() 函数每秒通过 websocket 调用服务器还是只打一个电话?客户端如何知道服务器有新消息?

服务器端 我是否创建了一个运行无限循环的脚本以继续检查 API 并回显结果?

Websocket websocket如何知道一条消息属于哪个连接?

我不确定这是否重要,但我将使用 Ratchet 创建 websocket

【问题讨论】:

  • 看起来他们有一个很好的入门教程,也许从那里开始:socketo.me/docs/hello-world
  • @Rasclatt 我实际上阅读了该教程并应用了它,它没有解释这个概念。我能够编写聊天应用程序,其中 2 个 dos 终端相互发送消息“聊天”,但它没有告诉我如何构建对 API 的外部检查并向客户端报告。

标签: php websocket ratchet phpwebsocket


【解决方案1】:

在过去的几天里,我通过 Comet 解决了这个问题。我使用了 PHP,Node.js。您应该检查彗星技术并查找 php 和 NOde.js。

http://www.screenr.com/SNH

http://blog.jamieisaacs.com/2010/08/27/comet-with-nginx-and-jquery/

等等

【讨论】:

  • 视频中解释的这种方法对我不起作用,因为它每次调用都会创建一个新的 TCP 连接,这会在您自己的服务器上设置某种类型的 dos 攻击。事实上,它给我带来了一个大问题,因为服务器一直达到允许的最大 TCP 连接。这就是我想使用 Websocket 的原因。
【解决方案2】:

客户端:

没有。您已连接。没有要执行的轮询。 (这是 WebSocket 的主要优势和目的。)

当服务器向客户端发送消息时,客户端会触发onmessage回调。

服务器端:

是的,您可以设置一个无限循环,以设定的时间间隔重新检查您的 API。您还可以拥有一个“虚拟”WebSocket 客户端,当有新信息可用时,它将向您的主 WS 服务器发送一条消息。您还可以使用过程信号。您还可以在 API 端点之间设置一个开放式套接字,以通知您的服务器有更新。您可以将 API 设置为在服务器上推送信息。还有几十种其他方法可以从侧通道获取信息,并枚举它们(更不用说任何一种方法的详细信息)远远超出了这个问题的范围。

研究、了解每种方法的好处和限制以及实施最佳方法是您获得大笔报酬并被视为主题专家的原因。

WS 服务器如何知道连接了哪个客户端

PHP 套接字使用句柄——一个不透明的值,在 PHP 中恰好是一个整数,但绝不应将其视为指示将消息发送到何处的路标以外的任何东西。只要您的应用程序正在跟踪此值(并且我相信 Ratchet 在这方面为您完成了一些繁重的工作)并且它仍然与您的用户对象相关联,那么您应该很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2015-01-05
    • 2011-05-20
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多