我可以使用 socket.io-client 连接到标准 websocket 吗?

2024-02-14

尝试使用socket.io-client连接到用Go编写的websocket服务器。我已使用节点 WebSocket 库成功连接(npm https://www.npmjs.org/package/ws)。所以工作的 Websocket 代码如下所示:

  goSocketPort = 6060
  url = "ws://localhost:#{goSocketPort}/streamresults/"
  ws = new WebSocket(url)

  ws.on('open', ->
    log "socket opened"
  )

  ws.on('message', (message) ->
      console.log('received: %s', message)
    #log "Socket message: #{JSON.stringify message}"
  )

非常简单并且有效——另一端的套接字以设定的频率发送消息。但我最初尝试过socket.io-client (npm https://www.npmjs.org/package/socket.io-client)但就是无法让它走。它当然将 websocket 列为其首选传输方式,但如果我能让它连接的话该死的:

socket = ioClient.connect("#{url}", {port: goSocketPort, transports: ['xhr-polling', 'websocket']}) 

socket.on("connect", (r) ->
  log "connected to #{url}"
)

连接永远不会发生,所以没有任何on事件被触发并且代码立即退出。我尝试过:将端口从 url 中删除并将其添加到选项中,删除传输选项(根据文档,这意味着“全部”)并使用 http url。是socket-io.client无法连接到“标准”网络套接字?


根据我们的聊天,您似乎被这句话误导了:

socket.io 客户端基本上是一个简单的 HTTP Socket 接口实现。它看起来与 WebSocket 类似,但在用户浏览器不支持 WebSocket 时提供附加功能并利用其他传输。

这意味着从与 Socket.io 客户端/服务器交互的客户端/服务器代码的角度来看,它看起来与 WebSocket 类似。然而,网络流量看起来与简单的 WebSocket 非常不同 - 除了连接后在 WebSocket 之上构建的更强大的协议之外,还有初始握手。握手的描述here https://github.com/LearnBoost/socket.io-spec#handshake和消息协议here https://github.com/LearnBoost/socket.io-spec#messages(两者都是 Socket.IO 协议规范的链接)。

如果您正在编写 WebSocket 服务器,那么最好只使用裸露的 WebSocket 接口而不是 Socket.io 客户端,除非您打算实现所有 Socket.io 协议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用 socket.io-client 连接到标准 websocket 吗? 的相关文章

随机推荐