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

jco*_*lum 20 websocket node.js coffeescript socket.io

尝试使用socket.io-client连接到用Go编写的websocket服务器.我已经使用节点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}"
  )
Run Code Online (Sandbox Code Playgroud)

非常简单且有效 - 另一端的套接字以固定频率发送消息.但我最初尝试socket.io-client(npm)并且无法让它去.它肯定会将websocket列为首选的传输方式,但该死的如果我可以连接它:

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

socket.on("connect", (r) ->
  log "connected to #{url}"
)
Run Code Online (Sandbox Code Playgroud)

连接永远不会发生,因此没有任何on事件被触发,代码立即退出.我已经尝试过:将端口从网址中删除并将其添加到选项中,不使用传输选项(根据文档意味着"全部")并使用http网址.是socket-io.client不是能够连接到一个"标准"的WebSocket的?

Aar*_*our 31

基于我们的聊天,看起来你被这句话误导了:

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

这意味着它从与Socket.io客户端/服务器交互的客户端/服务器代码的角度看起来与WebSocket类似.但是,网络流量看起来与简单的WebSocket非常不同 - 除了在连接之后构建在WebSocket之上的更强大的协议之外,还有初始握手.握手被描述在这里和消息协议这里(均是链接到Socket.IO协议规范).

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

  • 哦,主啊,谢谢你.在我想要搜索这个确切的问题之前一小时的调试,我真的希望网站更清楚socket.io需要客户端和服务器端组件,并且不能与仅WS客户端交互.它与我相反 - 它可以与WS或2-3个其他协议进行通信 (13认同)