socket.io 服务器能否与非 socket.io 客户端通信

Posted

技术标签:

【中文标题】socket.io 服务器能否与非 socket.io 客户端通信【英文标题】:Can a socket.io server communicate with a non-socket.io client 【发布时间】:2017-10-20 17:56:19 【问题描述】:

我正在构建一个聊天服务器,它使用自定义协议通过套接字与客户端进行通信。客户端向服务器发送特定的字符串,服务器必须根据这些非标准消息采取适当的行动。我无法更改此协议,也无法访问底层客户端代码。

我的问题是,如果我不知道客户端如何处理它的套接字活动,我可以使用 node.js socket.io 包来为服务器套接字通信提供动力吗?我之所以问,是因为通过阅读 socket.io 文档,每次我通过套接字推送任何内容时,每个操作都会关联一个“事件”。

是否可以从捆绑了此“事件”的服务器向客户端发送非常准确的消息?我最好使用 websockets 包吗?

【问题讨论】:

我知道这不是您要询问的具体技术,但您可能会研究 WebRTC 解决方案 - 您甚至会找到 node.js 聊天服务器教程。 【参考方案1】:

socket.io 服务器能否与非 socket.io 客户端通信

没有。 socket.io 服务器既需要 webSocket 协议来启动连接,又需要 socket.io 格式。因此,socket.io 服务器只能与 socket.io 客户端通信,反之亦然。

如果您的聊天客户端使用自定义协议,那么您需要实现一个也使用该自定义协议(无论是什么协议)的 TCP 服务器。

如果您可以修改客户端,那么您可以将其修改为使用 socket.io 客户端,然后您可以通过 socket.io 发送聊天消息,然后您的 socket.io 服务器可以接收这些消息。

客户端向服务器发送特定的字符串,服务器必须根据这些非标准消息采取适当的行动。我无法更改此协议,也无法访问底层客户端代码。

然后,您必须实现一个服务器,该服务器会根据客户端的底层协议使用您的自定义客户端协议。没有其他办法。

我之所以问,是因为通过阅读 socket.io 文档,每次我通过套接字推送任何内容时,都会与每个操作关联一个“事件”。

这就是 socket.io 层的工作方式。它发送消息和(可选)数据。这总是可以用来发送数据,只需声明一个通用的data 消息,然后在另一端监听data 消息。但是,这假设您可以修改客户端和服务器以这种方式工作。如果你不能修改你的客户端使用socket.io协议,那么你就不能使用socket.io。

【讨论】:

谢谢,非常果断的回答。您能否指出我可以使用我自己的协议实现纯 TCP 服务器的库的方向?乍一看,我在想“网”

以上是关于socket.io 服务器能否与非 socket.io 客户端通信的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 ES6 模块使用 Socket.IO 客户端?

/socket.io/socket.io.js 中不提供 Socket.io

节点 js - Socket.io-client 未连接到 socket.io 服务器

android studio连接io.socket:sokect.io-client服务器的条件

Socket.io-client 未连接到 socket.io 服务器反应和节点(快递)

学习 Socket.io