【问题标题】:how to display socket's data sent from server in two output fileds in browser according to the requirements?如何根据要求在浏览器的两个输出文件中显示从服务器发送的套接字数据?
【发布时间】:2025-12-15 08:10:01
【问题描述】:

我正在使用 websockets 在 php 中设计一个聊天程序。在客户端,我想在两个不同的输出字段中显示聊天和在线用户。 由于聊天消息和在线用户是使用相同的 socket_send() 方法从服务器发送的,那么当我在客户端收到套接字的数据时,如何在客户端区分服务器是否发送了在线用户或聊天消息,以便我可以将它们显示在两个不同的输出字段中。

希望你能明白我想说的话。 我在客户端使用 javascript。

【问题讨论】:

  • 你需要在应用协议中加入一些东西来区分它们。
  • 假设您在客户端使用 JSON.stringify 和 JSON.parse 方法,您可以将适当的属性名称添加到字符串中,一切顺利。例如,您可以在用户名列表前加上“users:”,在实际聊天消息前加上“msg:”(或其他)。我想重点是,你可以为所欲为,但如果你在 JS 中使用 JSON 对象,这可能是最简单的解决方案。

标签: php javascript sockets websocket


【解决方案1】:

您的 WebSocket 连接类似于现实世界中的空气。 WebSocket 消息对应于声音。当人们发出声音时,这些声音会通过空气传播到其他人的耳朵中。

但是,为了让我们理解其他人的声音的含义,我们开发了一种可以称为通信协议的东西。我们开发了单词并给了它们发音。因此,发声者能够将他们的想法转化为声音。接收者能够将这些声音转换回意义。

到目前为止,您的客户端和服务器之间都有空气,即 WebSocket。你可以发出声音(发送消息)。但到目前为止,两者都缺少一个通信协议,一个共同的理解。你必须提供那个。没办法。您会意识到这可能会成为一项相当复杂的任务。

不过,在含义、声音(在您的情况下为“消息”)和反之亦然之间扮演上帝并设计转换规则是很有趣的。

所以,继续,发明一个协议。这是其他人说的。您应该想出某些对象类型,例如UserMessage,您将为消息分配属性,例如senderrecipient。然后,您很可能会以某种形式对这些对象进行编码,将它们放入消息中并在客户端和服务器之间发送这些消息。

客户端服务器都需要了解您的基本对象类型,并且需要了解对象在这些消息中的编码方式。

【讨论】: