node.js - websocket 客户端到 socket.io

标签 node.js websocket socket.io

我需要一个服务器来接受来自 websocket 和 socket.io 客户端的连接,这可能吗?当我只运行 socket.io 时,socket.io 客户端也能正常工作,但标准的 websocket 客户端无法连接。另一方面,当我在 socket.io 旁边运行 websocket 服务器时,websocket 运行良好,但在尝试通过 socket.io 连接的浏览器中,我看到错误 WebSocket connection to ... failed: Invalid frame header。是否有可能使两个连接都在单个服务器实例上工作?

我正在使用 express.iowebsocket-node让它只与 express.oi 一起工作会很棒。

最佳答案

虽然 @jfriend00 说 socket.io 是 webSocket 之上的附加协议(protocol)是正确的,但我发现附加协议(protocol)可能非常简单。我认为 socket.io@2.0.3 服务器隐式运行由 ws@2.3.1 提供支持的 WebSocket 服务器,我设法(在 F12/网络工具的帮助下)使用 native WebSocket 客户端连接到它。

socket.io 客户端:

var socket = io('http://localhost');
socket.emit('hello', 'there');

网络套接字客户端:

var ws = new WebSocket('ws://localhost/socket.io/?EIO=3&transport=websocket');
ws.send('42' + JSON.stringify(['hello', 'there']));
// ws.onmessage will get a MessageEvent object with the data property being encoded in the similar way.

Socket.IO API 更抽象,它处理事件和参数,而 WebSocket API 处理字符串。

关于node.js - websocket 客户端到 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29604563/

相关文章:

node.js - angular2 quickstart npm install 失败

mysql - 为什么更新查询在此功能中不起作用?

javascript - 用 arrayBuffer 录制 mp3

WebSocket 关闭操作码

javascript - node.js 强制只有一个线程执行代码

javascript - socket.io 是如何工作的?

node.js - 在 Node 中使用 libsodium.crypto_pwhash (Argon2)

javascript - 在对象数组内搜索

firefox - Phonegap:启动Firefox浏览器

javascript - 如何使用socket io向特定房间的特定客户端发送数据