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

标签 node.js coffeescript websocket socket.io

尝试使用 socket.io-client 连接到一个用 Go 编写的 websocket 服务器。我已经使用 Node WebSocket 库 ( npm ) 成功连接。所以工作的 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 ) 却无法启动。它当然将 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 是否无法连接到“标准”websocket?

最佳答案

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

The socket.io client is basically a simple HTTP Socket interface implementation. It looks similar to WebSocket while providing additional features and leveraging other transports when WebSocket is not supported by the user's browser.

这意味着从与 Socket.io 客户端/服务器交互的客户端/服务器代码的角度来看,它看起来类似于 WebSocket。然而,网络流量看起来与简单的 WebSocket 非常不同——除了建立在 WebSocket 之上的更强大的协议(protocol)之外,还有一个初始握手,一旦连接完成。握手描述here和消息协议(protocol)here (两者都是 Socket.IO 协议(protocol)规范的链接)。

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

关于node.js - 我可以使用 socket.io-client 连接到标准的 websocket 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22232023/

相关文章:

javascript - socket.on() 和 socket.once() 之间的区别

node.js - 如何在 443 中为 apache 和 Node 配置 https 支持?

css - 未定义的表单样式

javascript - 如何将主干模型插入子集合?

Node.js:使用参数进行 HTTP POST

java - Socket io 提示 CORS

node.js - 函数加载错误: Code in file index. js无法加载。 firebase函数问题

node.js - Nodejs 回调或 eventEmitter

c++ - Nodejs C++ 事件发射器。附加错误。 MakeCallback 中的非函数。方法 = 发出中止陷阱 : 6

c# - 在 C# 中创建 Websocket 服务器的最简单方法是什么?