当前位置: 首页 > 面试题库 >

如何使用socket.io-client连接到标准websocket?

鄢晔
2023-03-14
问题内容

尝试使用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}"
  )

非常简单并且有效-另一端的套接字以设定的频率发送消息。但是我最初尝试使用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并将其添加到选项中,离开transports选项(根据文档,意思是“全部”)并使用http
url。是socket-io.client不是能够连接到一个“标准”的WebSocket的?


问题答案:

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

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

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

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



 类似资料:
  • 我有这个演示设置: > 节点.js在端口 8001 上运行的 WebSocket 服务器 #1(使用“socket.io”) 节点。js WebSocket服务器#2(使用'socket.io')在端口8002上运行 在端口 8000 上运行的 nginx websocket 反向代理: node.js客户端(使用socket.io客户端,而不是浏览器JavaScript客户端)尝试连接到服务器#

  • 我正在制作一个实时多人游戏socket.io和node.js,我有一个html文件,运行一个公共脚本连接到服务器并运行命令,以及定义我需要的库

  • 现在我正在使用Criteria Hibernate查询从员工表中查询所有记录,它工作正常。我需要将员工表与库表联接,其中库。Emp_Id=员工。Emp_id我是否需要从员工表中获取所有记录,并从库表中获取书名和结账日期,作为联接选择查询的一部分。我该怎么做?

  • 此查询用于检索一对多关系中的最后记录(请参阅SQL连接:选择一对多关系中的最后记录) 我的问题是:如何使用jpa criteria api使用subselect构建这个连接?可能吗?如果没有,可以使用jpql吗? 到目前为止我的代码:

  • 两个数据库表具有外键关系。 它们通过JPA映射到两个实体A和B,但是连接列是从实体中手动删除的,因此在JPA世界中,类A和B是不相关的,您不能通过字段/属性从一个类导航到另一个类。 使用JPA标准API,是否可以创建连接两个表的查询? 我在互联网上找到的所有示例都使用join列来实现目标,但如上所述,它已从代码中删除,因为大多数时候我对A和B之间的关系不感兴趣,而且我担心可能的开销。

  • 只是一个简单的问题。 我一直在网上寻找支持,以创建标准连接帐户与颤振,但我仍然遇到以下问题: \我应该在我的字段中放什么在我的方法中?根据留档,它是: 但它是一款移动应用?所以我有点困惑,我应该把什么放在那里。