0

我正在尝试为 android 构建一个 Tabris 应用程序,作为我的 socket.io 服务器的客户端我正在阅读并看到 tabris.js 支持 WebSocket API,所以我尝试连接到我的 socket.io 服务器,如这个

var socket = new WebSocket('ws://159.89.92.113:4343');

但我得到这个错误

The WebSocket protocol has too be a string or an array of strings

所以我试着用我能想到的唯一的东西来填充那个参数

var socket = new WebSocket('ws://159.89.92.113:4343', 'ws');

然后我得到这个错误

Can not 'send' WebSocket message when WebSocket state is CONNECTING

老实说,我不知道如何完成这项工作,我尝试了很多不同的东西。

4

2 回答 2

2

关于protocols参数,这是WHATWG 标准所说的:

协议是字符串或字符串数​​组。如果它是一个字符串,则相当于一个仅由该字符串组成的数组;如果省略,则相当于空数组。数组中的每个字符串都是一个子协议名称。只有当服务器报告它选择了这些子协议之一时,才会建立连接。Sec-WebSocket-Protocol子协议名称必须与包含由 WebSocket 协议定义的字段值的元素的要求相匹配。

因此,如果有的话,请参阅您的服务器的实现,以了解该参数的发送内容。


连接时不应出现“当 WebSocket 状态为 CONNECTING 时无法‘发送’WebSocket 消息”消息,但如果您尝试发送太早,则很可能会出现;该消息send()在连接阶段被调用时特别出现。您可以延迟发送消息,直到建立连接,如下所示:

const socket = new WebSocket('ws://159.89.92.113:4343'); 
socket.onopen = (event) => {
    socket.send('Hello World');
};

最后,这是一个使用 Tabris.js 应用程序作为带有 websocket 服务器的客户端客户端的 WebSocket 设置的端到端工作示例:

https://github.com/eclipsesource/tabris-js/tree/2.x/examples/web-socket

简单地:

git clone https://github.com/eclipsesource/tabris-js
cd tabris-js
git checkout 2.x
cd examples/web-socket
npm install
tabris serve

并在另一个窗口中启动服务器,从同一个目录npm run server

*请注意,这是为 Tabris.js 2.x 编写的,因此您需要使用 2.x 客户端对其进行测试或将其迁移到 3.x

于 2019-11-06T01:25:43.737 回答
1

好的,所以问题一直是我需要在 github 上指定协议有人指出他们通常使用“聊天协议”作为参数,所以一旦我做到了,它就可以完美运行

const socket = new WebSocket('ws://157.230.66.208:4343/socket.io/?EIO=3&transport=websocket','chat-protocol');

还要使用常规网络套接字与 socket.io 交谈,您必须像这样格式化字符串

socket.send('42' + JSON.stringify(['checkLogin' , username, password]));

像魅力一样工作只需要弄清楚如何让承诺和回调像那样工作

于 2019-11-12T00:04:19.123 回答